23 Common MongoDB Query Operators & How to Use Them

23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung

  • Orchestrierung
6 Minuten Lesezeit Aktualisiert Apr 24, 2021

Auf einen Blick: 23 gängige MongoDB-Abfrageoperatoren ermöglichen fortgeschrittene Datenabfragen durch verschiedene Typen, darunter Vergleichs-, logische und Array-Operatoren, mit praktischen Beispielen, die ihre Verwendung veranschaulichen.

  • Operatoren wie $eq, $gt und $lt vergleichen Dokumentenwerte.
  • Logische Operatoren wie $and und $or kombinieren mehrere Abfragebedingungen.

In diesem Artikel werfen wir einen Blick auf die am häufigsten verwendeten MongoDB-Abfrageoperatoren. Wir erklären, was sie tun, und teilen dann Beispiele, damit Sie sehen können, wie sie funktionieren.

Erfahren Sie mehr darüber, wie Projektionsoperatoren die Abfrageleistung optimieren können:

Über MongoDB-Abfrageoperatoren

Was sind Betreiber in MongoDB?

MongoDB-Operatoren sind spezielle Symbole oder Schlüsselwörter, die zur Interaktion mit der Datenbank verwendet werden können. Sie leiten einen Compiler oder Interpreter an, mathematische oder logische Operationen durchzuführen.

Die Abfrageoperatoren erweitern die Funktionalität von MongoDB, indem sie es Entwicklern ermöglichen, komplexe Abfragen zu erstellen, um mit Datensätzen zu interagieren, die zu ihren Anwendungen passen.

Der Einstieg mit AIOps ist einfach. Verwalten Sie die steigende IT-Komplexität mit künstlicher Intelligenz für den Unternehmensbetrieb ›

Welche verschiedenen Arten von Abfrageoperatoren gibt es in MongoDB?

MongoDB bietet Abfrageoperatortypen wie Vergleichsoperatoren und mehr an.

MongoDB bietet folgende Abfrageoperatortypen an:

Wie kann man Abfrageoperatoren in MongoDB verwenden?

MongoDB-Operatoren können mit jedem unterstützten MongoDB-Befehl verwendet werden. Korrekt angewendet können Mongo Shell Basic-Befehle die Abfragelast reduzieren, indem sie die enthaltenen und ausgeschlossenen Felder steuern. Das Ergebnis ist eine verbesserte Leistung.

Beispiele für MongoDB-Abfrageoperatoren

Schauen wir uns nun die häufig verwendeten MongoDB-Abfrageoperatoren an. (Wir werden nicht auf alle eingehen, es gibt so viele.) Wir verwenden den folgenden Datensatz mit der find()- Funktion, um die Funktionalität jedes Operators zu demonstrieren.

Datenbank: Supermarkt

Inkasso: Mitarbeiter, Inventar, Zahlungen, Promo

    use supermarket
db.employees.find()
db.inventory.find()
db.payments.find()
db.promo.find()

Datensatz:

Vergleichsoperatoren in MongoDB

MongoDB-Vergleichsoperatoren können verwendet werden, um Werte in einem Dokument zu vergleichen. Die folgende Tabelle enthält die gängigen Vergleichsoperatoren.

Betreiber Beschreibung
$eq Stimmt Werten ab, die dem gegebenen Wert entsprechen.
$gt Es stimmt überein, wenn die Werte größer als der angegebene Wert sind.
$lt Übereinstimmungen, wenn die Werte kleiner als der gegebene Wert sind.
$gte Stimmt überein, wenn die Werte größer oder gleich dem gegebenen Wert sind.
$lte Übereinstimmungen, wenn die Werte kleiner oder gleich dem gegebenen Wert sind.
$in Entspricht jedem der Werte in einem Array.
$ne Entspricht Werten, die nicht gleich dem gegebenen Wert sind.
$nin Entspricht keinem der in einem Array angegebenen Werte.

Der $eq-Operator sorgt für Klarheit in der Abfrage, um Dokumente abzugleichen, bei denen der Wert eines Feldes spezifisch ist – Ihre Ergebnisse stimmen mit einem bestimmten Wert überein.

In diesem $eq-Operator-Beispiel rufen wir das Dokument mit dem genauen _id Wert "LS0009100" ab.

    db.inventory.find({"_id": { $eq: "LS0009100"}}).pretty()

Ergebnis:

MongoDB $eq Operator-Beispiel.

$gt und $lt Betreiber

Diese beiden verwandten Operatoren liefern Ergebnisse, die "größer als" und "kleiner als" angegebene Werte sind.

In diesem Beispiel des $gt Operators rufen wir die Dokumente ab, bei denen die 'Menge' größer als 5000 ist.

    db.inventory.find({"quantity": { $gt: 5000}}).pretty()

Ergebnis:

MongoDB $gt Operator-Beispiel.

Finden wir die Dokumente mit der 'Menge' unter 5000 mit dem $lt-Operator.

    db.inventory.find({"quantity": { $lt: 5000}}).pretty()

Ergebnis:

MongoDB $lt Operator-Beispiel.

$gte und $lte Betreiber

Diese Operatoren verfeinern die beiden oben, indem sie den Parameter "gleich zu" addieren, sodass man Ergebnisse erhält, die und zwischen zwei Werten liegen.

Finden Sie Dokumente mit einer 'Menge' größer oder gleich 12.000 anhand des folgenden $gte Operator-Beispiels.

    db.inventory.find({"quantity": { $gte: 12000}}).pretty()

Ergebnis:

MongoDB $gte Operator-Beispiel.

Die folgende Abfrage liefert Dokumente, bei denen die Menge kleiner oder gleich 1000 ist.

    db.inventory.find({"quantity": { $lte: 1000}}).pretty()

Ergebnis:

MongoDB $lte Operator-Beispiel.

$in und $nin Betreiber

Die Operatoren $in und $nin liefern Ergebnisse, wenn der Wert in einer Wertmenge liegt oder nicht – nämlich dass er mit einem bestimmten Array übereinstimmt oder nicht.

Die folgende Abfrage liefert Dokumente, in denen das Preisfeld die gegebenen Werte enthält.

    db.inventory.find({"price": { $in: [3, 6]}}).pretty()

Ergebnis:

MongoDB $in Operator-Beispiel.

Wenn Sie Dokumente finden möchten, in denen die Preisfelder die angegebenen Werte nicht enthalten, verwenden Sie die folgende Abfrage.

    db.inventory.find({"price": { $nin: [5.23, 3, 6, 3.59, 4.95]}}).pretty()

Ergebnis:

MongoDB $nin Operator Beispiel.

Der $ne-Operator liefert Ergebnisse, die mit Werten übereinstimmen, die nicht gleich dem gegebenen Wert sind, was hilfreich ist, um das auszuschließen, was für Ihre Abfrage nicht relevant ist.

Finden Sie Dokumente, bei denen der Wert des Preisfeldes in der Inventarsammlung nicht 5,23 entspricht.

    db.inventory.find({"price": { $ne: 5.23}})

Ergebnis:

MongoDB $ne Operator-Beispiel.

Logische Operatoren in MongoDB

MongoDB-Logikoperatoren können verwendet werden, um Daten basierend auf gegebenen Bedingungen zu filtern. Diese Operatoren bieten eine Möglichkeit, mehrere Bedingungen zu kombinieren. Jeder Operator setzt die gegebene Bedingung mit einem wahren oder falschen Wert gleich.

Hier sind die Beispiele für MongoDB-logische Operatoren:

Betreiber Beschreibung
$and Fügt zwei oder mehr Abfragen mit einem logischen UND zusammen und liefert die Dokumente zurück, die allen Bedingungen entsprechen.
$or Fügen Sie zwei oder mehr Abfragen mit einem logischen OR zusammen und geben Sie die Dokumente zurück, die zu einer der beiden Anfragen passen.
$nor Das Gegenteil des OR-Operators. Der logische NOR-Operator verbindet zwei oder mehr Abfragen und liefert Dokumente, die nicht den gegebenen Abfragebedingungen entsprechen.
$not Gibt die Dokumente zurück, die nicht mit dem angegebenen Abfrageausdruck übereinstimmen.

Um Ergebnisse zu erhalten, die auf zwei oder mehr Anfragen antworten, verknüpfen Sie diese mit dem $and-Operator.

Finden Sie Dokumente, die beiden folgenden Bedingungen entsprechen

  • job_role entspricht "Filialmitarbeiter"
  • emp_age liegt zwischen 20 und 30
    db.employees.find({ $and: [{"job_role": "Store Associate"}, {"emp_age": {$gte: 20, $lte: 30}}]}).pretty()

Ergebnis:

MongoDB $and Operator-Beispiel.

$or und $nor Betreiber

Für Ergebnisse, die einer Abfrage oder einer von vielen Abfragen entsprechen, verwenden Sie den $or logischen Operator. Für Ergebnisse, die keiner der Abfragen entsprechen, verwenden Sie den Operator $nor.

Finden Sie Dokumente, die eine der folgenden Bedingungen erfüllen.

  • job_role entspricht "leitender Kassierer" oder "Filialleiter"
  • job_role entspricht "leitender Kassierer" oder "Filialleiter"
    db.employees.find({ $or: [{"job_role": "Senior Cashier"}, {"job_role": "Store Manager"}]}).pretty()

Ergebnis:

MongoDB $or Operator-Beispiel.

Finden Sie Dokumente, die keiner der folgenden Bedingungen entsprechen.

  • job_role entspricht "leitender Kassierer" oder "Filialleiter"
    db.employees.find({ $nor: [{"job_role": "Senior Cashier"}, {"job_role": "Store Manager"}]}).pretty()

Ergebnis:

MongoDB $nor Operator-Beispiel.

Wenn Sie bestimmte Ergebnisse ausschließen möchten, können Sie den Ausschlussparameter mit dem $not-Operator angeben.

Suchen Sie Dokumente, bei denen sie nicht mit dem angegebenen Zustand übereinstimmen.

  • emp_age ist nicht größer als oder gleich 40
    db.employees.find({ "emp_age": { $not: { $gte: 40}}})

Ergebnis:

MongoDB $not Operator-Beispiel.

Elementoperatoren in MongoDB

Die Element-MongoDB-Abfrageoperatoren werden verwendet, um Dokumente anhand der Felder des Dokuments zu identifizieren. Die folgende Tabelle listet die aktuellen Elementoperatoren auf.

Betreiber Beschreibung
$exists Stimmt Dokumenten überein, die das angegebene Feld haben.
$type Ordnet Dokumente entsprechend dem angegebenen Feldtyp ab. Diese Feldtypen sind spezifizierte BSON-Typen und können entweder durch Typnummer oder Alias definiert werden.

Verwenden Sie den $exists-Operator, um nach Dokumenten zu filtern, die ein bestimmtes Feld haben.

Finde Dokumente, in denen das job_role Feld existiert und gleich "Kassierer" ist.

    db.employees.find({ "emp_age": { $exists: true, $gte: 30}}).pretty()

Ergebnis:

MongoDB $exists Operator-Beispiel.

Finde Dokumente mit einem Adressfeld. (Da der aktuelle Datensatz kein Adressfeld enthält, ist die Ausgabe null.)

    db.employees.find({ "address": { $exists: true}}).pretty()

Ergebnis:

MongoDB $exists echtes Operatorbeispiel.

Wenn Datenbankobjekte in einer BSON-Notation auf Typ vermerkt werden, verwenden Sie den $type-Operator, um Ergebnisse entsprechend einem spezifischen, gewünschten Objekttyp herauszufiltern.

Die folgende Abfrage liefert Dokumente, wenn das emp_age-Feld ein Doppeltyp ist. Wenn wir einen anderen Datentyp angeben, werden keine Dokumente zurückgegeben, obwohl das Feld existiert, da es nicht dem korrekten Feldtyp entspricht.

    db.employees.find({ "emp_age": { $type: "double"}})

Ergebnis:

MongoDB $type Operator-Beispiel.
    db.employees.find({ "emp_age": { $type: "bool"}})

Ergebnis:

MongoDB $type Operator Beispiel 2.

Evaluationsoperatoren in MongoDB

Die MongoDB-Evaluationsoperatoren können die gesamte Datenstruktur oder das einzelne Feld in einem Dokument bewerten. Wir betrachten nur die grundlegende Funktionalität dieser Operatoren, da jeder dieser Operatoren als fortgeschrittene MongoDB-Funktionalität betrachtet werden kann. Hier ist eine Liste gängiger Evaluationsoperatoren in MongoDB.

Betreiber Beschreibung
$jsonSchema Validiere das Dokument gemäß dem gegebenen JSON-Schema.
$mod Stimmt Dokumenten ab, bei denen der Wert eines bestimmten Feldes nach der Teilung durch einen bestimmten Wert gleich dem Rest ist.
$regex Wählen Sie Dokumente aus, die dem gegebenen regulären Ausdruck entsprechen.
$text Führen Sie eine Textsuche im angegebenen Feld durch. Die Suche kann nur durchgeführt werden, wenn das Feld mit einem Textindex indexiert ist.
$where Stimmt Dokumenten ab, die einen JavaScript-Ausdruck erfüllen.

$jsonSchema Operator

Validieren Sie ein Dokument anhand seines JSON-Schemas, indem Sie den $jsonSchema-Operator verwenden, um Ihren Parameter anzugeben.

Finden Sie Dokumente, die dem folgenden JSON-Schema in der Promo-Sammlung entsprechen.

Die $let-Aggregation wird verwendet, um die Variablen an ein Ergebnisobjekt für einfachere Ausgaben zu binden. Im JSON-Schema haben wir den Mindestwert für das Feld "Period" als 7 angegeben, der jedes Dokument mit einem niedrigeren Wert herausfiltert.

    let promoschema = {
bsonType: "object",
required: [ "name", "period", "daily_sales" ],
properties: {
"name": {
bsonType: "string",
description: "promotion name"
},
"period": {
bsonType: "double",
description: "promotion period",
minimum: 7,
maximum: 30
},
"daily_sales": {
bsonType: "array"
}
}
}
    db.promo.find({ $jsonSchema: promoschema }).pretty()

Ergebnis:

MongoDB $jsonschema Operator-Beispiel.

Select ergibt sich mit dem $mod-Operator, der den Wert eines Feldes durch eine bestimmte Zahl und den Rest teilt.

Finden Sie Dokumente, bei denen der Rest 1000 beträgt, wenn man sie durch 3000 teilt, in der Inventarsammlung.

Beachten Sie, dass das Dokument "Milch Fettfrei – 1 Liter" in der Produktion enthalten ist, da die Menge 1000 beträgt, was nicht durch 3000 geteilt werden kann, und der Rest 1000.

    db.inventory.find({"quantity": {$mod: [3000, 1000]}}).pretty()

Ergebnis:

MongoDB $mod Operator-Beispiel.

Verwenden Sie den $regex-Operator für einen regulären Ausdruck mit der Möglichkeit, innerhalb von Zeichenketten Mustererkennung durchzuführen.

Finde Dokumente, die im Namensfeld in der Inventarsammlung das Wort "Packed" enthalten.

    db.inventory.find({"name": {$regex: '.Packed.'}}).pretty()

Ergebnis:

MongoDB $regex Operator-Beispiel.

Um Ergebnisse zu finden, die ein Wort oder eine Phrase enthalten, verwenden Sie den Operator $text für eine Textsuche.

Finden Sie Dokumente, indem Sie im Namensfeld einen Text verwenden, der nach "Non-Fat" sucht. Wenn das Feld nicht indexiert ist, müssen Sie vor der Suche einen Textindex erstellen.

    db.inventory.createIndex({ "name": "text"})

Ergebnis:

MongoDB erstellt einen Textindex.
    db.inventory.find({ $text: { $search: "Non-Fat"}}).pretty()

Ergebnis:

MongoDB $text Operator-Beispiel.

Um Ergebnisse mit einem JavaScript-Ausdruck abzugleichen, verwenden Sie den Operator $where.

Finden Sie Dokumente aus der "Payments"-Sammlung, in der das _id-Feld ein Zeichenfolgentyp ist und dem gegebenen md5-Hash entspricht, der als JavaScript-Funktion definiert ist.

    db.payments.find({ $where: function() { var value =  isString(this._id) && hex_md5(this._id) == '57fee1331906c3a8f0fa583d37ebbea9'; return value; }}).pretty()

Ergebnis:

MongoDB $where Operator-Beispiel.

Array-Operatoren in MongoDB

MongoDB-Array-Operatoren sind darauf ausgelegt, Dokumente mit Arrays abzufragen. Hier sind die von MongoDB bereitgestellten Array-Operatoren.

Betreiber Beschreibung
$all Stimmt Arrays überein, die alle in der Abfragebedingung angegebenen Werte enthalten.
$size Entspricht den Dokumenten, wenn die Array-Größe der angegebenen Größe in einer Abfrage entspricht.
$elemMatch Stimmt Dokumenten ab, die den angegebenen $elemMatch Bedingungen innerhalb jedes Array-Elements entsprechen.

Für ein Array, das jeden angegebenen Wert in einer Abfragebedingung enthält, verwenden Sie den Operator $all.

Finden Sie Dokumente, in denen das Kategorienarray-Feld "gesunde" und "organische" Werte enthält.

    db.inventory.find({ "category": { $all: ["healthy", "organic"]}}).pretty()

Ergebnis:

MongoDB $all Operator-Beispiel.

Verwenden Sie den $size-Operator, um die Ergebnisse so zu filtern, dass sie nur diejenigen zurückgeben, die einer bestimmten Größe entsprechen.

Finde Dokumente, bei denen das Kategorienarrayfeld zwei Elemente hat.

    db.inventory.find({ "category": { $size: 2}}).pretty()

Ergebnis:

MongoDB $size Operator-Beispiel.

Verwenden Sie den $elemMatch-Operator, um Ergebnisse abzugleichen, bei denen mindestens ein Element alle angegebenen Abfragekriterien in einem Array erfüllt.

Finden Sie Dokumente, bei denen mindestens ein Element im "daily_sales"-Array kleiner als 200 und größer als 100 ist.

    db.promo.find({ "daily_sales": { $elemMatch: {$gt: 100, $lt: 200}}}).pretty()

Ergebnis:

MongoDB $elemMatch Operator-Beispiel.

Kommentaroperator in MongoDB

Der MongoDB-Kommentar-Abfrageoperator ordnet einen Kommentar jedem Ausdruck zu, der ein Abfrageprädikat verwendet. Das Hinzufügen von Kommentaren zu Abfragen ermöglicht es Datenbankadministratoren, MongoDB-Protokolle mit den Kommentaren einfach zu verfolgen und zu interpretieren.

$comment Operator

Finden Sie Dokumente, bei denen der Punkt 7 entspricht, während Sie einen Kommentar zur Suchaktion hinzufügen.

    db.promo.find({ "period": { $eq: 7}, $comment: "Find Weeklong Promos"}).pretty()

Ergebnis:

MongoDB $comment Operator-Beispiel.

Das Hinzufügen von Kommentaren ermöglicht es Nutzern, Befehle in MongoDB-Logs leicht zu identifizieren. Die obige Operation wird wie folgt protokolliert.

    db.adminCommand( { getLog:'global'} ).log.forEach(x => {print(x)})

Ergebnis:

Entdecken Sie weitere MongoDB-Betreiber

In diesem Artikel haben wir nur an der Oberfläche der MongoDB-Operatoren gekratzt. Wir können die Gesamtfunktionalität der Datenbank mit Projektionsoperatoren und und weiter erweitern AggregaTE-Funktionen.

Verwandte Literatur

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Orchestrierung

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.