MongoDB voorwaardelijke operators specificeer een voorwaarde waarmee de waarde van het documentveld moet overeenkomen.
Vergelijkingsquery-operators
- $eq (gelijk)
- $ne (niet gelijk)
- $gt (meer dan)
- $lt (minder dan)
- $gte (meer of gelijk)
- $lte (minder of gelijk aan)
- $in definieert een reeks waarden, waarvan er één een documentveld moet hebben
- $nin definieert een reeks waarden die geen documentveld zouden moeten hebben
We zullen bijvoorbeeld alle documenten vinden waarvan de sleutelwaarde voor de leeftijd lager is dan 30:
db.users.find ({age: {$lt : 30}})
Het gebruik van andere vergelijkingsoperatoren zal vergelijkbaar zijn. Bijvoorbeeld dezelfde sleutel, alleen meer dan 30:
db.users.find ({age: {$gt : 30}})
Houd er rekening mee dat de vergelijking hier wordt gemaakt over integer-typen, niet over strings. Als de sleutelleeftijd tekenreekswaarden vertegenwoordigt, moet de vergelijking worden gemaakt over de regels:db.users.find ({age:{$gt :“30”}}), maar het resultaat zal hetzelfde zijn.
Maar laten we ons een situatie voorstellen waarin we alle volumes moeten vinden met een leeftijdsveldwaarde groter dan 30 maar kleiner dan 50. In dit geval kunnen we twee operatoren combineren:
db.users.find ({age: {$gt : 30, $lt: 50}})
We zullen gebruikers vinden met een leeftijd van 22:
db.users.find ({age: {$eq : 22}})
In wezen is dit de analogie van de volgende vraag:
db.users.find ({age: 22})
Omgekeerde werking – vind gebruikers wiens leeftijd NIET 22 is:
db.users.find ({age: {$ne : 22}})
De operator $in definieert een array van mogelijke expressies en zoekt naar die sleutels waarvan de waarde in de array staat:
db.users.find ({age: {$in : [22, 32]}})
Op de tegenovergestelde manier definieert de $nin-operator een array van mogelijke expressies en zoekt naar die sleutels waarvan de waarde in deze array ontbreekt:
db.users.find ({leeftijd:{$nin:[22, 32]}})
Logische operatoren
Logische operatoren worden uitgevoerd onder bemonsteringscondities:
- $of :verbindt twee voorwaarden, en het document moet aan een van deze voorwaarden voldoen
- $en: verbindt twee voorwaarden, en het document moet aan beide voorwaarden voldoen
- $not: het document mag NIET overeenkomen met de voorwaarde
- $nor: verbindt twee voorwaarden, en het document mag NIET aan beide voorwaarden voldoen
MongoDB-voorbeeldoperatoren
De operator $or vertegenwoordigt een logische OR-bewerking en definieert een set sleutel-waardeparen die in een document aanwezig moeten zijn. En als een document ten minste één zo'n sleutel-waardepaar heeft, komt het overeen met deze vraag en wordt het uit de database gehaald:
db.users.find ({$or : [{name: "Tom"}, {age: 22}]})
Deze uitdrukking retourneert alle documenten met naam=Tom of leeftijd=22.
Een ander voorbeeld retourneert alle documenten met naam=Tom en leeftijd=22 of met “duits” tussen de taalwaarden:
db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})
Voorwaardelijke operators kunnen worden gebruikt in subexpressies of subexpressies:
db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})
In dit geval selecteren we alle documenten waarbij name=”Tom” of het leeftijdsveld een waarde van 30 of hoger heeft.
Operator $en
De operator $and vertegenwoordigt een logische bewerking AND (logische vermenigvuldiging) en definieert een reeks criteria waaraan een document moet voldoen. In tegenstelling tot de $or-operator, moet het document aan alle gespecificeerde criteria voldoen. Bijvoorbeeld:
db.users.find ({$and : [{name: "Tom"}, {age: 32}]})
Hier moeten de geselecteerde documenten de naam Tom hebben en 32 jaar oud zijn – beide kenmerken.
MongoDB-array zoeken
Sommige operators zijn ontworpen om met arrays te werken:
- $all: definieert een set waarden die in een array zouden moeten voorkomen
- $size: definieert het aantal elementen dat in een array moet staan
- $elemMatch: specificeert de voorwaarde waaraan de elementen in de array moeten corresponderen
MongoDB $all
De operator $all definieert een reeks mogelijke uitdrukkingen en vereist dat documenten de volledige gedefinieerde reeks uitdrukkingen hebben. Dienovereenkomstig wordt het gebruikt om de array te doorzoeken. Documenten hebben bijvoorbeeld een reeks talen waarin de vreemde talen zijn opgeslagen die door de gebruiker worden gesproken. En om alle mensen te vinden die tegelijkertijd Engels en Frans spreken, kunnen we de volgende uitdrukking gebruiken:
db.users.find ({languages: {$all : ["english", "french"]}})
Operator $elemMatch
Met de $elemMatch-operator kunt u documenten selecteren waarin arrays elementen bevatten die onder bepaalde voorwaarden vallen. Laat de database bijvoorbeeld een verzameling gebruikersbeoordelingen voor specifieke cursussen bevatten. Laten we een paar documenten toevoegen:
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}]}))
Elk document heeft een array, die op zijn beurt weer uit geneste documenten bestaat.
Nu zullen we studenten vinden die een cijfer hoger dan 3 hebben voor de MongoDB-cursus:
db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})
Operator $size
De $size operator wordt gebruikt om documenten te vinden waarin arrays een aantal elementen hebben die gelijk zijn aan de waarde van $size. Laten we bijvoorbeeld alle documenten extraheren waar er twee elementen in de taalarray zijn:
db.users.find ({languages: {$size:2}})
Een dergelijke vraag komt bijvoorbeeld overeen met het volgende document:
{"name": "Tom", "age": 32, languages: ["english", "german"]}
Operator $bestaat
De $exists operator staat toe om alleen die documenten te extraheren waar een bepaalde sleutel aanwezig of afwezig is. Retourneer bijvoorbeeld alle documenten die de bedrijfssleutel bevatten:
db.users.find ({company: {$exists:true}})
Als we $exists opgeven als de parameter 'false', retourneert de query ons alleen die documenten die de bedrijfssleutel niet bevatten.
Operator $type
De operator $type extraheert alleen die documenten waarin een bepaalde sleutel een waarde van een bepaald type heeft, bijvoorbeeld een tekenreeks of een getal:
db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})
Operator $regex
De operator $regex specificeert een reguliere expressie waarmee de veldwaarde moet corresponderen . Laat de veldnaam bijvoorbeeld noodzakelijkerwijs de letter "b" hebben:
db.users.find ({name: {$regex: "b"}})
Het is belangrijk om te begrijpen dat $regex niet alleen strings gebruikt, maar ook reguliere expressies, bijvoorbeeld:name:{$regex:“om$”} – de waarde van name moet eindigen op “om”.