sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB Ukázkové operátory

​​

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”.

Výukový program MongoDB:Operátory dotazů pole ($all, $elemMatch, $size)


  1. Použití S3 jako databáze vs. databáze (např. MongoDB)

  2. MongoDB - Vytvořte databázi

  3. Multiparametrový vyhledávač zápasů s Redis

  4. MongoError:Nepodařilo se připojit k serveru při prvním připojení