Bedingte MongoDB-Operatoren Geben Sie eine Bedingung an, der der Wert des Dokumentfelds entsprechen soll.
Operatoren für Vergleichsabfragen
- $eq (gleich)
- $ne (nicht gleich)
- $gt (mehr als)
- $lt (weniger als)
- $gte (mehr oder gleich)
- $lte (weniger oder gleich)
- $in definiert ein Array von Werten, von denen einer ein Dokumentfeld haben sollte
- $nin definiert ein Array von Werten, die kein Dokumentfeld haben sollten
Zum Beispiel werden wir alle Dokumente finden, deren Altersschlüsselwert kleiner als 30 ist:
db.users.find ({age: {$lt : 30}})
Die Verwendung anderer Vergleichsoperatoren ist ähnlich. Zum Beispiel der gleiche Schlüssel, nur über 30:
db.users.find ({age: {$gt : 30}})
Beachten Sie, dass der Vergleich hier über Integer-Typen und nicht über Strings erfolgt. Wenn das Schlüsselalter Zeichenfolgenwerte darstellt, sollte der Vergleich über die Zeilen erfolgen:db.users.find ({age:{$gt :„30“}}), aber das Ergebnis wird dasselbe sein.
Aber stellen wir uns eine Situation vor, in der wir alle Bände mit einem Altersfeldwert größer als 30, aber kleiner als 50 finden müssen. In diesem Fall können wir zwei Operatoren kombinieren:
db.users.find ({age: {$gt : 30, $lt: 50}})
Wir finden Benutzer, die 22 Jahre alt sind:
db.users.find ({age: {$eq : 22}})
Im Wesentlichen ist dies die Analogie der nächsten Abfrage:
db.users.find ({age: 22})
Umgekehrte Operation – Benutzer finden, deren Alter NICHT 22 ist:
db.users.find ({age: {$ne : 22}})
Der $in-Operator definiert ein Array möglicher Ausdrücke und sucht nach den Schlüsseln, deren Wert im Array enthalten ist:
db.users.find ({age: {$in : [22, 32]}})
Umgekehrt definiert der $nin-Operator ein Array möglicher Ausdrücke und sucht nach den Schlüsseln, deren Wert in diesem Array fehlt:
db.users.find ({Alter:{$nin:[22, 32]}})
Logische Operatoren
Logische Operatoren werden über Stichprobenbedingungen ausgeführt:
- $oder :verbindet zwei Bedingungen, und das Dokument muss eine dieser Bedingungen erfüllen
- $und: verbindet zwei Bedingungen, und das Dokument muss beide Bedingungen erfüllen
- $nicht: das Dokument darf die Bedingung NICHT erfüllen
- $noch: verbindet zwei Bedingungen, und das Dokument darf NICHT beide Bedingungen erfüllen
MongoDB-Beispieloperatoren
Der $or-Operator stellt eine logische ODER-Operation dar und definiert eine Reihe von Schlüssel-Wert-Paaren, die in einem Dokument vorhanden sein sollten. Und wenn ein Dokument mindestens ein solches Schlüssel-Wert-Paar hat, entspricht es dieser Abfrage und wird aus der Datenbank extrahiert:
db.users.find ({$or : [{name: "Tom"}, {age: 22}]})
Dieser Ausdruck gibt alle Dokumente mit entweder Name=Tom oder Alter=22 zurück.
Ein weiteres Beispiel gibt alle Dokumente mit entweder Name=Tom und Alter=22 oder mit „deutsch“ unter den Sprachwerten zurück:
db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})
Bedingungsoperatoren können in Teilausdrücken oder Teilausdrücken verwendet werden:
db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})
In diesem Fall wählen wir alle Dokumente aus, bei denen name=“Tom“ oder das Altersfeld einen Wert von 30 oder höher hat.
Operator $und
Der $and-Operator stellt eine logische UND-Operation (logische Multiplikation) dar und definiert eine Reihe von Kriterien, die ein Dokument erfüllen muss. Im Gegensatz zum $or-Operator muss das Dokument alle angegebenen Kriterien erfüllen. Zum Beispiel:
db.users.find ({$and : [{name: "Tom"}, {age: 32}]})
Hier müssen die ausgewählten Dokumente den Namen Tom und das Alter 32 haben – beides Merkmale.
MongoDB-Array-Suche
Einige Operatoren wurden entwickelt, um mit Arrays zu arbeiten:
- $all: definiert eine Menge von Werten, die in einem Array vorhanden sein sollten
- $size: definiert die Anzahl der Elemente, die in einem Array enthalten sein sollen
- $elemMatch: gibt die Bedingung an, der die Elemente im Array entsprechen müssen
MongoDB $all
Der $all-Operator definiert ein Array möglicher Ausdrücke und erfordert, dass Dokumente über den gesamten definierten Satz von Ausdrücken verfügen. Dementsprechend wird es verwendet, um das Array zu durchsuchen. Beispielsweise haben Dokumente ein Array von Sprachen, das die vom Benutzer gesprochenen Fremdsprachen speichert. Und um alle Personen zu finden, die gleichzeitig Englisch und Französisch sprechen, können wir den folgenden Ausdruck verwenden:
db.users.find ({languages: {$all : ["english", "french"]}})
Operator $elemMatch
Mit dem $elemMatch-Operator können Sie Dokumente auswählen, in denen Arrays Elemente enthalten, die unter bestimmte Bedingungen fallen. Lassen Sie die Datenbank beispielsweise eine Sammlung von Benutzerbewertungen für bestimmte Kurse enthalten. Lassen Sie uns ein paar Dokumente hinzufügen:
db.grades.insertMany([{student: "Tom", courses:[{name: "Java", grade: 5}, {name: "MongoDB", grade: 4}]},
{student: "Alice", courses:[{name: "C++", grade: 3}, {name: "MongoDB", grade: 5}]}))
Jedes Dokument hat ein Array, das wiederum aus verschachtelten Dokumenten besteht.
Jetzt finden wir Studenten, die für den MongoDB-Kurs eine Note über 3 haben:
db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})
Operator $size
Der $size-Operator wird verwendet, um Dokumente zu finden, in denen Arrays eine Anzahl von Elementen haben, die gleich dem Wert von $size sind. Lassen Sie uns zum Beispiel alle Dokumente extrahieren, in denen es zwei Elemente im Laguages-Array gibt:
db.users.find ({languages: {$size:2}})
Eine solche Abfrage entspricht beispielsweise dem folgenden Dokument:
{"name": "Tom", "age": 32, languages: ["english", "german"]}
Operator $existiert
Der $exists-Operator erlaubt es, nur die Dokumente zu extrahieren, bei denen ein bestimmter Schlüssel vorhanden oder nicht vorhanden ist. Geben Sie beispielsweise alle Dokumente zurück, die den Unternehmensschlüssel enthalten:
db.users.find ({company: {$exists:true}})
Wenn wir $exists als falschen Parameter angeben, gibt uns die Abfrage nur die Dokumente zurück, die den Unternehmensschlüssel nicht enthalten.
Operator $type
Der $type-Operator extrahiert nur die Dokumente, bei denen ein bestimmter Schlüssel einen Wert eines bestimmten Typs hat, z. B. eine Zeichenfolge oder eine Zahl:
db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})
Operator $regex
Der $regex-Operator gibt einen regulären Ausdruck an, dem der Feldwert entsprechen soll . Lassen Sie zum Beispiel den Feldnamen unbedingt den Buchstaben „b“ haben:
db.users.find ({name: {$regex: "b"}})
Es ist wichtig zu verstehen, dass $regex nicht nur Zeichenketten akzeptiert, sondern reguläre Ausdrücke, zum Beispiel:name:{$regex:„om$“} – der Wert von name muss mit „om“ enden.