Direkt zum Inhalt

Wie man Einbettungen in MongoDB speichert und abfragt

Lerne, wie du Einbettungen in MongoDB mit Atlas Vector Search speichern, indizieren und abfragen kannst.
Aktualisiert 19. Dez. 2025  · 8 Min. lesen

Der Aufstieg von LLMs und der semantischen Suche hat die Art und Weise, wie wir Such-, Empfehlungs- und Abrufsysteme entwickeln, total verändert. Die klassische Stichwortsuche – egal ob mitSQL- -LIKE, Lucene Inverted oder Volltextindizes – reicht immer weniger aus, wenn Leute ein Verständnis natürlicher Sprache erwarten.

Hier geht's um Einbettungen und Vektordatenbanken ins Spiel.

MongoDB hat sich in diesem Bereich mit Atlas Vector Searchschnell weiterentwickelt und bietet Entwicklern jetzt eine einzige Datenbank für Dokumente, Metadaten und Vektoren – alles unter einer API. In diesem Leitfaden gehen wir auf Folgendes ein:

  • Was ist MongoDB?
  • Was sind Query Embeddings und warum sind sie wichtig?
  • Wann du Einbettungen verwenden solltest.
  • Wie man Einbettungen in MongoDB speichert.
  • Wie man sie mit Python erstellt und abfragt.

Dieses Tutorial ist praxisorientiert und kann direkt in deine Retrieval-Augmented Generation (RAG), Ähnlichkeitssuche oder Empfehlungspipeline einbauen kannst.

Was ist MongoDB?

MongoDB ist eine dokumentenorientierte nosql-Datenbank, die Daten in flexiblen BSON-Dokumentenspeichert BSON ist eine binär codierte JavaScript Object Notation (JSON) – eine textbasierte Objektnotation, die häufig für die Übertragung und Speicherung von Daten in webbasierten Anwendungen genutzt wird. Im Gegensatz zu starren relationalen Datenbanken macht MongoDB die Schemaentwicklung einfach und bietet:

  • Horizontale Skalierbarkeit (Sharding).
  • Umfangreiches Aggregations-Framework.
  • Volltextsuche.
  • Vektorsuche.
  • Zeitreihen-Sammlungen.
  • Flexibilität des Schemas.

MongoDB Atlas – der komplett verwaltete Cloud-Dienst – bietet zusätzlich:

  • Atlas-Suche (basierend auf Lucene).
  • Atlas-Vektorsuche (semantische Suche über HNSW-Indizierung).
  • Automatische Skalierung, Backups, Sicherheit und Überwachung.

MongoDB ist eine super Wahl für KI-Aufgaben geworden, weil Vektoren oft zusammen mit Metadaten vorkommen und MongoDB Atlas das alles in einem System zusammenfasst.

Was sind Einbettungen und warum nutzen wir Abfrageeinbettungen?

Wenn du mit Such- oder Abrufvorgängen in KI-Anwendungen arbeitest, ist eines der ersten Konzepte, auf die du stößt, die Einbettungen

Eine Einbettung ist im Grunde eine numerische Darstellung, eine lange Liste von Fließkommawerten, die die Bedeutung eines Textes (oder Bildes, Audios usw.) erfasst. Anstatt die genauen Wörter zu betrachten, ordnen Einbettungen den Text in einen Vektorraum ein, in dem ähnliche Ideen nahe beieinander liegen. Schau dir zum Beispiel drei verschiedene Benutzeranweisungen an:

  • Problem mit der Rechnungsstellung
  • Fehler bei der Zahlung
  • Gehalt nicht gutgeschrieben

Auch wenn die Wörter unterschiedlich sind, beschreiben alle drei ein finanzielles Problem. Ein gutes Einbettungsmodell platziert diese Texte im Vektorraum nahe beieinander, sodass du sie anhand ihrer Bedeutung statt anhand von Schlüsselwörtern abrufen kannst.

Das ist besonders wichtig, wenn der Nutzer eine Suche macht. Der Text, den sie eingeben – „Warum kommt mein Gehalt zu spät?“ – wird auch in eine Einbettung umgewandelt. Dieser neue Vektor heißt und ist eineAbfrageeinbettung. Dann vergleichst du diesen Abfragevektor mit allen gespeicherten Einbettungen, um herauszufinden, welche Dokumente sich semantisch ähneln. Je näher die Vektoren beieinander liegen, desto relevanter ist das Ergebnis.

MongoDB Atlas macht diesen ganzen Arbeitsablauf mit Atlas Vector Searchecht einfach . Nachdem deine Dokumente und ihre Einbettungen in einer MongoDB-Sammlung gespeichert wurden, erstellt Atlas einenVektorindex namens „ (, der intern HNSW nutzt), der schnell ähnliche Dokumente in großem Umfang abrufen kann. Wenn du zum Beispiel Support-Artikel mit ihren Einbettungen speicherst, könnte eine Abfrage wie ...

query = "Why isn't my salary showing up this month?"
query_vec = get_embedding(query) # Explained in below examples

…kann direkt in MongoDB verwendet werden:

results = collection.aggregate([
    {
        "$vectorSearch": {
            "path": "embedding",
            "queryVector": query_vec,
            "index": "vector_index",
            "limit": 3
        }
    }
])

MongoDB zeigt dir automatisch die drei Support-Artikel an, deren Einbettungen am besten zur Suchanfrage passen – ohne dass du irgendwelche Keyword-Abgleiche oder manuelle Bewertungen machen musst.

Das ist das Besondere an Einbettungen in MongoDB Atlas: Du speicherst nicht nur Text, sondern auch Bedeutung, und du suchst nicht nur nach Wörtern, sondern nach der Absicht dahinter. Dieser Wandel ist der Grund, warum Einbettungen zu einem wichtigen Baustein für die semantische Suche, RAG-Systeme, KI-Assistenten und intelligente Wissensdatenbanken geworden sind.

Wann man Query Embeddings benutzt

Verwende Einbettungen, wenn du semantische Ähnlichkeit, wie zum Beispiel:

Retrieval-Augmented Generation (RAG)

  • Gib deinem LLM genaue Infos aus deiner Wissensdatenbank
  • Ersetze die veraltete Stichwortsuche

Chatbots, die ein tiefes Verständnis brauchen

  • Portal-Helpdesk
  • Kundenservice

Produktempfehlung

  • „Ähnliche Artikel wie dieser Artikel“

Erkennung von Dokumenten oder Duplikaten

  • Clustering
  • Themengruppierung

Wenn die Stichwortsuche nicht klappt

  • Fragen wie „Verzögerung der Gehaltsgutschrift“ vs. „Problem bei der Zahlungsabwicklung“

Mach verwende verwende keine Einbettungen, wenn:

  • Du brauchst eine exakte Übereinstimmung (IDs, Rechnungsnummern).
  • Dein Datensatz ist winzig (einfache Suche funktioniert).
  • Du brauchst numerische Filterung/Vergleiche (das sollten die Metadaten übernehmen).

Wie man Einbettungen in MongoDB speichert

Das Coole an MongoDB ist, dass Einbettungen einfach in Dokumente reinpassen. Du speicherst sie einfach als Arrays von Fließkommazahlen.

Beispiel für ein Dokumentenschema

Hier ist eine typische Dokumentstruktur:

{
  "_id": "uuid-123",
  "text": "This is a sample document about MongoDB vector search.",
  "embedding": [0.123, -0.241, 0.998, ...],
  "tags": ["mongodb", "vector", "ai"],
  "createdAt": "2025-01-01T10:20:00Z"
}

Wichtige Dinge, die du beachten solltest:

  • Jede Einbettung in einer Sammlung muss die gleiche Dimension.
  • Einbettungen sollten am besten als float32 gespeichert werden (MongoDB wandelt sie intern in float64 um).
  • Wenn deine Dokumente lang sind, teil sie , bevor du sie einbettest.
  • Metadaten separat speichern – Tags, Kategorie, URL, Zeitstempel usw. Das macht die hybride Suche echt stark.

Erstellen eines Vektorindex in MongoDB (wichtiger Schritt)

Bevor du Einbettungen speicherst oder abfragst, musst du einen Vektorsuchindex in MongoDB Atlas erstellen.

Geh in MongoDB Atlas zu: Atlas → Datenbank → Sammlungen → Suche → Suchindex erstellen

Verwende eine Definition wie:

{
  "fields": [
    {
      "type": "vector",
      "path": "embedding",
      "numDimensions": 1536,
      "similarity": "cosine"
    }
  ]
}

Das sagt MongoDB:

  • Das Feld enthält enthält Vektoren.
  • Jeder Vektor hat 1536 Dimensionen.
  • Benutze die Kosinusähnlichkeit für die Rangfolge.

Dieser Index unterstützt alle Vektorsuchanfragen.

MongoDB hat native Vektorsuchfunktionen und unterstützt:

  • Kosinusähnlichkeit.
  • Euklidische Distanz.
  • dotProduct-Bewertung.

Entscheide dich je nach deinem Einbettungsmodell – aber woher wissen wir, was wir wählen sollen? Lass uns mal richtig eintauchen.

Kosinusähnlichkeit

Was es misst

Es zeigt an, wie gut zwei Vektorenaufeinander ausgerichtet sind – also den Winkel zwischen ihnen. Es ignoriert die Größe und konzentriert sich nur auf die Richtung.

Intuition

  • Wenn zwei Vektoren in die gleiche Richtung zeigen → Ähnlichkeit nahe bei 1
  • Entgegengesetzte Richtungen → –1
  • Orthogonal (unabhängig) → 0

Wann man es benutzt

Benutze den Kosinus, wenn die Größe egal ist, sondern nur das Muster oder Konzept , das ausgedrückt wird.

Häufige Verwendungszwecke

  • Text embeddings/NLP
  • Semantische Suche
  • Empfehlungssysteme, die auf Bedeutung basieren, nicht auf Größe

Cosinus ist für die meisten Einbettungsmodelle die sicherste Standardeinstellung.

Euklidische Distanz

Was es misst

Es misst die Entfernung in einer geraden Linie zwischen zwei Vektoren im Raum.

Intuition

  • Kleiner Abstand → Vektoren sind ähnlich
  • Großer Abstand → Vektoren liegen weit auseinander

Wann man es benutzt

Verwende euklidisch, wenn es auf absolute Werte und Größenordnungen ankommtund nicht nur die Richtung wichtig sind.

Häufige Verwendungszwecke

  • Bild-Einbettungen
  • Physikalische Messungen/Sensordaten
  • Clustering-Algorithmen wie K-Means (das intern euklidische Algorithmen nutzt)

Wenn deine Daten von Natur aus in einer geometrischen Raum (z. B. Pixelintensitäten) gespeichert sind, ist euklidisch oft sinnvoller.

Skalarprodukt

Was es misst

Es misst eine Mischung aus Ähnlichkeit und Größe. 

Mathematisch ausgedrückt: dot(u, v) = |u| × |v| × cos(θ)

Intuition

  • Größere Stärke UND Ausrichtung → höhere Punktzahl
  • Empfindlich gegenüber Vektorlänge
  • Nicht automatisch normalisiert

Wann man es benutzt

Benutze das Skalarprodukt, wenn du möchtest, dass längere Vektoren mehr Einfluss haben oder wenn das Einbettungsmodell mit Blick auf das Skalarprodukt trainiert wurde.

Häufige Verwendungszwecke

  • Große Sprachmodell-Einbettungen, die das innere Produkt als Bewertung
  • Ähnlichkeitsschichten neuronaler Netze
  • Empfehlungsmodelle, bei denen die „Stärke“ der Merkmale wichtig ist

Schnelle Faustregel

Metrisch

Gut für

Vermeide es, wenn

Cosinus

Text, semantische Suche, allgemeine Einbettungen

Die Größe ist wichtig

Euklidisch

Bilder, geometrische Merkmale, Clustering

Die Daten haben eine willkürliche Skalierung.

Skalarprodukt

Mit innerem Produkt trainierte Modelle, Recsys

Größenordnungen verzerren die Ähnlichkeit

Embeddings in MongoDB erstellen, speichern und abfragen (Python-Tutorial)

Lass uns das durchgehen, als würden wir ein echtes System aufbauen.

Installiere Abhängigkeiten

pip install pymongo openai

Embeddings erstellen

Mit OpenAI (du kannst jeden beliebigen Embedding-Anbieter nehmen):

import os
from openai import OpenAI

os.environ["OPENAI_API_KEY"] = "your_api_key_here"
client = OpenAI()

def get_embedding(text: str):
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return response.data[0].embedding

Verbinde dich mit MongoDB und füge Dokumente ein

Mit OpenAI (du kannst jeden beliebigen Embedding-Anbieter nehmen):

from pymongo import MongoClient
import uuid

mongo = MongoClient("<MONGODB_ATLAS_URI>")
db = mongo["vector_db"]
collection = db["documents"]

text = "This is a sample document about MongoDB vector search."
embedding = get_embedding(text)

document = {
    "_id": str(uuid.uuid4()),
    "text": text,
    "embedding": embedding,
    "tags": ["mongodb", "search"],
}

collection.insert_one(document)
print("Document inserted successfully!")

Jetzt sind deine Daten bereit für die semantische Suche.

Abfragen von Einbettungen in MongoDB

Jetzt kommt der spannende Teil: das Abrufen ähnlicher Dokumente mithilfe einer Vektorabfrage. MongoDB nutzt “ und „$vectorSearch“ in einer Aggregationspipeline.

Abfragevektor erstellen

from pymongo import MongoClient
query = "How does MongoDB handle semantic search?"
query_vec = get_embedding(query)

Vektorsuche durchführen (Abfrage-Einbettungen)

results = collection.aggregate([
    {
        "$vectorSearch": {
            "index": "vector_index",
            "path": "embedding",
            "queryVector": query_vec,
            "numCandidates": 100,
            "limit": 5,
            "similarity": "cosine"
        }
    },
    {
        "$project": {
            "text": 1,
            "score": {"$meta": "vectorSearchScore"}
        }
    }
])

for r in results:
    print(r)

Das gibt die fünf Dokumente zurück, die semantisch am ähnlichsten sind.

Das ist super für RAG-Pipelines, wo du eine semantische Suche brauchst.

Schrittweise Erklärung der obigen Frage

$vectorSearch → Sucht nach Dokumenten, deren Einbettungsfeld am nächsten ist queryVector am nächsten kommt, indem die angegebene Ähnlichkeitsmetrik benutzt wird.

Anzahl der Kandidaten → Wie viele mögliche Treffer soll die Suchmaschine prüfen, bevor sie die besten Ergebnisse anzeigt?

Begrenzung → Anzahl der ähnlichen Endergebnisse, die zurückgegeben werden sollen

$project → Gibt den Originaltext plus ein spezielles Feld namens score

Was ist ein Punktfeld?

MongoDB Atlas Vector Search gibt ein spezielles Metadatenfeld zurück: „score”: {„$meta”: „vectorSearchScore”}, das dir sagt, wie ähnlich ein gespeicherter Vektor mit deinem Abfragevektor ist.

Die Bedeutung der Punktzahl hängt von der Ähnlichkeitsmetrik ab , die du wählst, wie unten erklärt:

Ähnlichkeitsmetrik

Was die Punktzahl bedeutet

Höhere Punktzahl = ähnlicher?

Punktespektrum

Kosinus

Winkelähnlichkeit zwischen Vektoren

Ja

von -1 bis +1

euklidisch

Negativer L2-Abstand

Nein – näher an 0 = ähnlicher

–∞ bis 0

dotProduct

Ausrichtung der Vektorgröße

Ja

–∞ bis +∞

Bewährte Verfahren

  • Teile lange Dokumente (jeweils 300–500 Token) in kleinere Teile auf: Bessere Relevanz + vermeidet das Einbetten langer Blobs
  • Metadaten separat speichern: Hilft beim Filtern und Bewerten
  • Batch-Einbettungsgenerierung: Verbessert den Durchsatz und senkt die Modellkosten
  • Verwende float32-Einbettungen in deinem Modell: MongoDB nutzt intern float64, akzeptiert aber auch float32-Arrays.
  • Nur das Vektorfeld indexieren: Zusätzliche Felder im Index erhöhen den Speicherbedarf und die Latenzzeit.

Häufige Fallstricke, die du vermeiden solltest

Problem

Warum das passiert

Dimensionsfehlanpassung

Abfragevektor dim ≠ Index dim

Unwichtige Ergebnisse

Unterschiedliche Modelle für Speicherung und Abfrage

Langsame Suche

Zu viele numCandidates oder große Cluster-Anforderungen

Dokument ist zu groß

Dokumentengrenze von 16 MB

Falsche Ähnlichkeitsmetrik

Modell für Kosinus trainiert, aber mit Skalarprodukt

Abschließende Gedanken

Einbettungen und semantische Suche sind jetzt echt wichtig für moderne KI-Produkte. Egal, ob du einen Chatbot, eine RAG-Pipeline, eine Empfehlungsmaschine oder eine intelligente Suchschicht entwickelst – du brauchst eine zuverlässige Möglichkeit, Vektoren zu speichern und effizient abzufragen.

MongoDB bietet dir eine einheitliche Plattform, auf der du:

  • Dein Text lebt.
  • Deine Metadaten leben.
  • Deine Einbettungen leben.
  • Deine Vektorsuche läuft.
  • Alles passt zusammen.

So vermeidest du die Komplexität, die mit dem Jonglieren verschiedener Datenbanken einhergeht, und kannst dich ganz auf die Entwicklung von Produktfunktionen konzentrieren, statt auf die Infrastruktur.

FAQs

Brauche ich eine eigene Vektordatenbank, wenn ich MongoDB für Einbettungen nutze?

Nein. MongoDB Atlas Vector Search ist schon eingebaut, sodass du Dokumente, Metadaten und Vektoren am selben Ort speichern kannst, ohne eine separate Vektor-Datenbank wie Pinecone oder Milvus zu brauchen.

Welche Einbettungsdimension sollte ich in MongoDB verwenden?

Benutze die Dimension, die dein Einbettungsmodell bietet (z. B. 768 oder 1536). Alle Dokumente in einer Sammlung müssen die gleichen Abmessungen wie der Vektorindex haben.

Kann MongoDB eine hybride Suche (Metadaten + Vektorsuche) durchführen?

Du kannst mit $match filtern und dann $vectorSearch in derselben Aggregationspipeline anwenden – ideal für RAG- und Empfehlungssysteme.

Ist MongoDB für große Vektorsuch-Workloads geeignet?

Ja. MongoDB nutzt HNSW-basierte Indizierung in Atlas Search, die sich super für Millionen von Dokumenten eignet. Der Durchsatz hängt von der Indexgröße, der Cluster-Ebene und den Workload-Mustern ab.

Kann ich jedes beliebige Einbettungsmodell mit MongoDB verwenden?

Auf jeden Fall. MongoDB ist modellunabhängig. Du kannst OpenAI, HuggingFace, Cohere, lokale Modelle oder benutzerdefinierte Einbettungen verwenden – solange die Dimensionen mit dem Index übereinstimmen.


Nilesh Soni's photo
Author
Nilesh Soni

Softwareentwickler bei Uber

Themen

Die besten DataCamp-Kurse

Kurs

Introduction to MongoDB in Python

3 Std.
22.7K
Learn to manipulate and analyze flexibly structured data with MongoDB.
Details anzeigenRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Tutorial

Ein Leitfaden zu Python-Hashmaps

Finde heraus, was Hashmaps sind und wie sie in Python mit Hilfe von Wörterbüchern umgesetzt werden.
Javier Canales Luna's photo

Javier Canales Luna

Tutorial

Python JSON-Daten: Ein Leitfaden mit Beispielen

Lerne, wie man mit JSON in Python arbeitet, einschließlich Serialisierung, Deserialisierung, Formatierung, Leistungsoptimierung, Umgang mit APIs und Verständnis der Einschränkungen und Alternativen von JSON.
Moez Ali's photo

Moez Ali

Tutorial

Python-Arrays

Python-Arrays mit Code-Beispielen. Lerne noch heute, wie du mit Python NumPy Arrays erstellen und ausdrucken kannst!
DataCamp Team's photo

DataCamp Team

Tutorial

Python-Methode list() mit Beispielen erklärt

Lerne, wie du mit der Python-Funktion index() die Position von Elementen in Listen findest.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Wie man Listen in Python aufteilt: Einfache Beispiele und fortgeschrittene Methoden

Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Allan Ouko's photo

Allan Ouko

Tutorial

Python-Anweisungen IF, ELIF und ELSE

In diesem Tutorial lernst du ausschließlich Python if else-Anweisungen kennen.
Sejal Jaiswal's photo

Sejal Jaiswal

Mehr anzeigenMehr anzeigen