Operatory warunkowe MongoDB określić warunek, któremu odpowiada wartość pola dokumentu.
Operatory zapytań porównawczych
- $eq (równe)
- $ne (nie równe)
- $gt (więcej niż)
- $lt (mniej niż)
- $gte (więcej lub równe)
- $lte (mniejszy lub równy)
- $w definiuje tablicę wartości, z których jedna powinna mieć pole dokumentu
- Nin $ definiuje tablicę wartości, która nie powinna mieć pola dokumentu
Na przykład znajdziemy wszystkie dokumenty, których wartość klucza wieku jest mniejsza niż 30:
db.users.find ({age: {$lt : 30}})
Użycie innych operatorów porównania będzie podobne. Na przykład ten sam klawisz, tylko ponad 30:
db.users.find ({age: {$gt : 30}})
Zauważ, że porównanie tutaj jest dokonywane na typach liczb całkowitych, a nie na ciągach. Jeśli wiek klucza reprezentuje wartości ciągu, porównanie należy przeprowadzić w wierszach:db.users.find ({wiek:{$gt:„30”}}), ale wynik będzie taki sam.
Ale wyobraźmy sobie sytuację, w której musimy znaleźć wszystkie objętości z wartością pola wieku większą niż 30, ale mniejszą niż 50. W tym przypadku możemy połączyć dwa operatory:
db.users.find ({age: {$gt : 30, $lt: 50}})
Znajdziemy użytkowników w wieku 22 lat:
db.users.find ({age: {$eq : 22}})
W skrócie jest to analogia do następnego zapytania:
db.users.find ({age: 22})
Operacja odwrotna – znajdź użytkowników, których wiek NIE MA 22:
db.users.find ({age: {$ne : 22}})
Operator $in definiuje tablicę możliwych wyrażeń i wyszukuje klucze, których wartość znajduje się w tablicy:
db.users.find ({age: {$in : [22, 32]}})
W odwrotny sposób, operator $nin definiuje tablicę możliwych wyrażeń i wyszukuje klucze, których wartości nie ma w tej tablicy:
db.users.find ({wiek:{$nin :[22, 32]}})
Operatory logiczne
Operatory logiczne są wykonywane w warunkach próbkowania:
- $lub :łączy dwa warunki, a dokument musi spełniać jeden z tych warunków
- $i: łączy dwa warunki, a dokument musi spełniać oba warunki
- $nie: dokument NIE może odpowiadać warunkom
- $nor: łączy dwa warunki, a dokument NIE może spełniać obu warunków
Przykładowe operatory MongoDB
Operator $or reprezentuje logiczną operację LUB i definiuje zestaw par klucz-wartość, które powinny być obecne w dokumencie. A jeśli dokument ma co najmniej jedną taką parę klucz-wartość, odpowiada temu zapytaniu i jest wyodrębniany z bazy danych:
db.users.find ({$or : [{name: "Tom"}, {age: 22}]})
To wyrażenie zwróci wszystkie dokumenty z imieniem=Tomek lub wiekiem=22.
Inny przykład zwróci wszystkie dokumenty z imieniem=Tom i wiekiem=22 lub z „niemieckim” wśród wartości językowych:
db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})
Operatory warunkowe mogą być używane w podwyrażeniach lub podwyrażeniach:
db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})
W tym przypadku wybieramy wszystkie dokumenty, w których name=”Tom” lub pole wieku ma wartość 30 lub wyższą.
Operator $i
Operator $and reprezentuje operację logiczną AND (mnożenie logiczne) i definiuje zestaw kryteriów, które musi spełniać dokument. W przeciwieństwie do operatora $or dokument musi spełniać wszystkie określone kryteria. Na przykład:
db.users.find ({$and : [{name: "Tom"}, {age: 32}]})
Tutaj wybrane dokumenty muszą mieć imię Tom i wiek 32 – obie te cechy.
Przeszukiwanie tablicy MongoDB
Niektóre operatory są przeznaczone do pracy z tablicami:
- $wszystkie: definiuje zestaw wartości, które powinny istnieć w tablicy
- $rozmiar: określa liczbę elementów, które powinny znajdować się w tablicy
- $elemMatch: określa warunek, któremu muszą odpowiadać elementy w tablicy
MongoDB $wszystkie
Operator $all definiuje tablicę możliwych wyrażeń i wymaga, aby dokumenty zawierały cały zdefiniowany zestaw wyrażeń. W związku z tym służy do przeszukiwania tablicy. Na przykład dokumenty mają szereg języków, w których przechowywane są języki obce używane przez użytkownika. Aby znaleźć wszystkie osoby, które mówią jednocześnie po angielsku i francusku, możemy użyć następującego wyrażenia:
db.users.find ({languages: {$all : ["english", "french"]}})
Operator $elemMatch
Operator $elemMatch pozwala wybrać dokumenty, w których tablice zawierają elementy spełniające określone warunki. Na przykład niech baza danych zawiera zbiór ocen użytkowników dla określonych kursów. Dodajmy kilka dokumentów:
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}]}))
Każdy dokument ma tablicę, która z kolei składa się z zagnieżdżonych dokumentów.
Teraz znajdziemy uczniów, którzy mają ocenę powyżej 3 z kursu MongoDB:
db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})
Rozmiar $ operatora
Operator $size służy do wyszukiwania dokumentów, w których tablice mają liczbę elementów równą wartości $size. Na przykład wyodrębnijmy wszystkie dokumenty, w których w tablicy laguages znajdują się dwa elementy:
db.users.find ({languages: {$size:2}})
Takie zapytanie będzie odpowiadać np. następującemu dokumentowi:
{"name": "Tom", "age": 32, languages: ["english", "german"]}
Operator $istnieje
Operator $exists pozwala wyodrębnić tylko te dokumenty, w których określony klucz jest obecny lub nieobecny. Na przykład zwróć wszystkie dokumenty zawierające klucz firmy:
db.users.find ({company: {$exists:true}})
Jeśli określimy $exists jako parametr false, zapytanie zwróci nam tylko te dokumenty, które nie zawierają klucza firmy.
Rodzaj operatora
Operator $type wyodrębnia tylko te dokumenty, w których określony klucz ma wartość określonego typu, np. ciąg znaków lub liczbę:
db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})
Operator $regex
Operator $regex określa wyrażenie regularne, któremu powinna odpowiadać wartość pola . Na przykład, niech nazwa pola musi mieć literę „b”:
db.users.find ({name: {$regex: "b"}})
Ważne jest, aby zrozumieć, że $regex nie przyjmuje tylko ciągów, ale wyrażeń regularnych, na przykład:name:{$regex:“om$”} – wartość nazwy musi kończyć się na “om”.