Rozdział 3: MongoDB - Zapytanie Warunkowe

W tym rozdziale przedstawiono zapytanie warunkowe MongoDB, które jest podobne do operatorów porównania, takich jak równy, większy niż i mniejszy niż w instrukcjach SQL.

Operatory Warunkowe Obsługiwane przez MongoDB

Operator Opis
$eq Równy, podobny do operatora = w SQL
$gt Większy niż, podobny do operatora > w SQL
$gte Większy niż lub równy, podobny do operatora >= w SQL
$in Odpowiada tablicy, dowolnej wartości, podobnie jak zapytanie in w SQL
$lt Mniejszy niż, podobny do operatora < w SQL
$nin Nie odpowiada żadnej wartości w tablicy, podobny do operatora not in w SQL

Dane Testowe

Dane kolekcji inventory są następujące:

{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }

$eq (Równe Dopasowanie)

db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )

// Skrócony zapis, można zignorować operator $eq, qty = 20
db.inventory.find( { qty: 20 } )

Odpowiednik SQL:

select * from inventory where qty = 20
// To tylko przykład, SQL nie obsługuje formatu zagnieżdżonych pól, takich jak item.name
select * from inventory where item.name = 20

$gt (Większy Niż)

db.inventory.find( { qty: { $gt: 20 } } )

Odpowiednik SQL:

select * from inventory where qty > 20

$gte (Większy Niż Lubi Równy)

db.inventory.find( { qty: { $gte: 20 } } )

Odpowiednik SQL:

select * from inventory where qty >= 20

$in

Odpowiada jednej wartości w tablicy

db.inventory.find( { qty: { $in: [ 5, 15 ] } } )

Odpowiednik SQL:

select * from inventory where qty in (5, 15)

$nin

Przeciwieństwo operatora $in

db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )

Odpowiednik SQL:

select * from inventory where qty not in (5, 15)

$lt (Mniejszy Niż)

db.inventory.find( { qty: { $lt: 20 } } )

Odpowiednik SQL:

select * from inventory where qty < 20