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 folgende Abfrageoperatortypen an:
- Vergleichsoperatoren
- Logische Operatoren
- Elementoperatoren
- Evaluationsoperatoren
- Geospatiale Operatoren
- Array-Operatoren
- Bitweise Operatoren
- Kommentarbediener
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:
$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:
Finden wir die Dokumente mit der 'Menge' unter 5000 mit dem $lt-Operator.
db.inventory.find({"quantity": { $lt: 5000}}).pretty()
Ergebnis:
$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:
Die folgende Abfrage liefert Dokumente, bei denen die Menge kleiner oder gleich 1000 ist.
db.inventory.find({"quantity": { $lte: 1000}}).pretty()
Ergebnis:
$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:
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:
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:
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:
$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:
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:
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:
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:
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:
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:
db.employees.find({ "emp_age": { $type: "bool"}})
Ergebnis:
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:
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:
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:
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:
db.inventory.find({ $text: { $search: "Non-Fat"}}).pretty()
Ergebnis:
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:
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:
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:
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:
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:
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
- BMC Machine Learning & Big Data Blog
- MongoDB-Sharding: Konzepte, Beispiele und Tutorials, Teil unseres MongoDB-Leitfadens
- BMC Guides, das eine Artikelserie zu verschiedenen Themen anbietet, darunter Apache Cassandra und Spark, AWS, Machine Learning und Data Visualization
- Datenspeicher erklärt: Data Lake vs. Warehouse vs. Datenbank
MongoDB-Leitfaden
- MongoDB-Überblick: Einstieg mit MongoDB
- Wie man MongoDB auf Ubuntu und Mac installiert
- Erstellung einer Datenbank in MongoDB
- MongoDB Shell Grundbefehle
- MongoDB Compass: Nutzung der Mongo GUI
- MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt
- MongoDB-Projektion und Projektionsoperatoren erklärt
- MongoDB-Aggregatfunktionen erklärt
- MongoDB-Sortierung: sort()-Methode & Beispiele
- Verwendung von Push-and-Pull-Operatoren in MongoDB
- Wie man MongoDB $unwind
- 23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung
- MongoDB GeoLocation-Abfragebeispiele
- Einführung in MongoDB-Transaktionen
- MongoDB-Indizes: Top-Indextypen und deren Verwaltung
- Die wichtigsten MongoDB-Befehle, die du kennen solltest
- MongoDB-Replikation: Eine vollständige Einführung
- Wie man einen MongoDB-Cluster einrichtet
- MongoDB Sharding: Konzepte, Beispiele & Tutorials
- MongoDB Atlas: Einrichtung und Nutzung von verwaltetem MongoDB
- Wie man MongoDB als Docker-Container ausführt
- MongoDB-Speichernutzung, Verwaltung und Anforderungen
- Wie man Mongodump für MongoDB-Backups verwendet
- Mongorestore-Beispiele zur Wiederherstellung von MongoDB-Backups
- Wie man PyMongo benutzt
- Wie man Mongoose für MongoDB und NodeJS verwendet
- MongoDB Spickzettel
- MongoDB vs Cassandra: NoSQL-Datenbanken im Vergleich
- PostgreSQL vs MongoDB: Vergleich von Datenbanken
- MySQL vs. MongoDB: Vergleich von Datenbanken
- MongoDB-Zertifizierungen: Eine Einführung
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.