Kapitel 3: MongoDB - Bedingte Abfrage
In diesem Kapitel wird die bedingte Abfrage von MongoDB vorgestellt, die ähnlich den Vergleichsoperatoren wie gleich, größer als und kleiner als in SQL-Anweisungen ist.
Von MongoDB unterstützte bedingte Operatoren
Operator | Beschreibung |
---|---|
$eq | Gleich, ähnlich wie der = Operator in SQL |
$gt | Größer als, ähnlich wie der > Operator in SQL |
$gte | Größer als oder gleich, ähnlich wie der >= Operator in SQL |
$in | Passt zu einem Array, einem beliebigen Wert, ähnlich der SQL in-Abfrage |
$lt | Kleiner als, ähnlich wie der < Operator in SQL |
$nin | Passt zu keinem Wert im Array, ähnlich dem SQL not in Operator |
Testdaten
Die Bestandskollektion enthält die folgenden Daten:
{ _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 (Gleichwertige Übereinstimmung)
db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )
// Verkürzt, der $eq Operator kann ignoriert werden, qty = 20
db.inventory.find( { qty: 20 } )
Äquivalentes SQL:
select * from inventory where qty = 20
// Dies ist nur ein Beispiel, SQL unterstützt nicht das Format von verschachtelten Feldern wie item.name
select * from inventory where item.name = 20
$gt (Größer Als)
db.inventory.find( { qty: { $gt: 20 } } )
Äquivalentes SQL:
select * from inventory where qty > 20
$gte (Größer Als oder Gleich)
db.inventory.find( { qty: { $gte: 20 } } )
Äquivalentes SQL:
select * from inventory where qty >= 20
$in
Passt zu einem Wert im Array
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
Äquivalentes SQL:
select * from inventory where qty in (5, 15)
$nin
Das Gegenteil des $in Operators
db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
Äquivalentes SQL:
select * from inventory where qty not in (5, 15)
$lt (Kleiner Als)
db.inventory.find( { qty: { $lt: 20 } } )
Äquivalentes SQL:
select * from inventory where qty < 20