Podmíněné operátory MongoDB zadejte podmínku, které má odpovídat hodnota pole dokumentu.
Operátory srovnávacích dotazů
- $ eq (rovná se)
- $ne (není stejné)
- $gt (více než)
- $lt (méně než)
- $gte (více nebo stejně)
- $lte (menší nebo rovno)
- $in definuje pole hodnot, z nichž jedna by měla mít pole dokumentu
- $nin definuje pole hodnot, které by nemělo mít pole dokumentu
Najdeme například všechny dokumenty, které mají hodnotu klíče věku menší než 30:
db.users.find ({age: {$lt : 30}})
Použití dalších operátorů porovnání bude podobné. Například stejný klíč, jen přes 30:
db.users.find ({age: {$gt : 30}})
Všimněte si, že zde srovnání probíhá přes celočíselné typy, nikoli řetězce. Pokud věk klíče představuje hodnoty řetězce, pak by porovnání mělo být provedeno přes řádky:db.users.find ({age:{$gt :“30”}}), ale výsledek bude stejný.
Představme si však situaci, kdy musíme najít všechny objemy s hodnotou pole stáří větší než 30, ale menší než 50. V tomto případě můžeme kombinovat dva operátory:
db.users.find ({age: {$gt : 30, $lt: 50}})
Najdeme uživatele, jejichž věk je 22:
db.users.find ({age: {$eq : 22}})
V podstatě jde o obdobu následujícího dotazu:
db.users.find ({age: 22})
Reverzní operace – vyhledejte uživatele, jejichž věk NENÍ 22:
db.users.find ({age: {$ne : 22}})
Operátor $in definuje pole možných výrazů a hledá ty klíče, jejichž hodnota je v poli:
db.users.find ({age: {$in : [22, 32]}})
Opačným způsobem operátor $nin definuje pole možných výrazů a hledá ty klíče, jejichž hodnota v tomto poli chybí:
db.users.find ({věk:{$nin :[22, 32]}})
Logické operátory
Logické operátory se provádějí za podmínek vzorkování:
- $or :spojuje dvě podmínky a dokument musí splňovat jednu z těchto podmínek
- $and: spojuje dvě podmínky a dokument musí splňovat obě podmínky
- $not: dokument NESMÍ odpovídat podmínce
- $nor: spojuje dvě podmínky a dokument NESMÍ splňovat obě podmínky
Ukázkové operátory MongoDB
Operátor $or představuje logickou operaci OR a definuje sadu párů klíč–hodnota, které by měly být přítomny v dokumentu. A pokud má dokument alespoň jeden takový pár klíč–hodnota, odpovídá tomuto dotazu a je extrahován z databáze:
db.users.find ({$or : [{name: "Tom"}, {age: 22}]})
Tento výraz vrátí všechny dokumenty, které mají buď jméno=Tom, nebo věk=22.
Jiný příklad vrátí všechny dokumenty s buď jméno=Tom a věk=22 nebo s „german“ mezi jazykovými hodnotami:
db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})
V podvýrazech nebo podvýrazech lze použít podmíněné operátory:
db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})
V tomto případě vybereme všechny dokumenty, kde jméno=”Tom” nebo pole věku má hodnotu 30 nebo vyšší.
Operátor $and
Operátor $and představuje logickou operaci AND (logické násobení) a definuje sadu kritérií, která musí dokument splňovat. Na rozdíl od operátoru $or musí dokument splňovat všechna zadaná kritéria. Například:
db.users.find ({$and : [{name: "Tom"}, {age: 32}]})
Zde musí mít vybrané dokumenty jméno Tom a věk 32 – obě tyto vlastnosti.
Vyhledávání pole MongoDB
Některé operátory jsou navrženy pro práci s poli:
- $all: definuje sadu hodnot, které by měly existovat v poli
- velikost $: definuje počet prvků, které by měly být v poli
- $elemMatch: určuje podmínku, které musí prvky v poli odpovídat
MongoDB $all
Operátor $all definuje pole možných výrazů a vyžaduje, aby dokumenty měly celou definovanou sadu výrazů. V souladu s tím se používá k prohledávání pole. Dokumenty mají například řadu jazyků, které ukládají cizí jazyky, kterými uživatel mluví. A abychom našli všechny lidi, kteří mluví anglicky i francouzsky současně, můžeme použít následující výraz:
db.users.find ({languages: {$all : ["english", "french"]}})
Operátor $elemMatch
Operátor $elemMatch vám umožňuje vybrat dokumenty, ve kterých pole obsahují prvky, které spadají za určitých podmínek. Nechte například databázi obsahovat kolekci uživatelských hodnocení pro konkrétní kurzy. Dovolte nám přidat několik dokumentů:
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ždý dokument má pole, které se skládá z vnořených dokumentů.
Nyní najdeme studenty, kteří mají z kurzu MongoDB známku vyšší než 3:
db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})
Operátor $velikost
Operátor $size se používá k vyhledání dokumentů, ve kterých mají pole počet prvků rovný hodnotě $size. Pojďme například extrahovat všechny dokumenty, kde jsou dva prvky v poli laguages:
db.users.find ({languages: {$size:2}})
Takový dotaz bude odpovídat např. následujícímu dokumentu:
{"name": "Tom", "age": 32, languages: ["english", "german"]}
Operátor $existuje
Operátor $exists umožňuje extrahovat pouze ty dokumenty, kde je přítomen nebo chybí určitý klíč. Vraťte například všechny dokumenty, které obsahují klíč společnosti:
db.users.find ({company: {$exists:true}})
Pokud zadáme $exists jako parametr false, dotaz nám vrátí pouze ty dokumenty, které neobsahují klíč společnosti.
Operátor $type
Operátor $type extrahuje pouze ty dokumenty, kde má určitý klíč hodnotu určitého typu, např. řetězec nebo číslo:
db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})
Operátor $regex
Operátor $regex určuje regulární výraz, kterému má odpovídat hodnota pole . Nechte například název pole nutně obsahovat písmeno „b“:
db.users.find ({name: {$regex: "b"}})
Je důležité pochopit, že $regex nebere pouze řetězce, ale regulární výrazy, například:name:{$regex:“om$”} – hodnota name musí končit “om”.