Capitolo 3: MongoDB - Query Condizionali
Questo capitolo introduce la query condizionale di MongoDB, simile agli operatori di confronto come uguale, maggiore di e minore di nelle istruzioni SQL.
Operatori condizionali supportati da MongoDB
Operatore | Descrizione |
---|---|
$eq | Uguale, simile all'operatore = di SQL |
$gt | Maggiore di, simile all'operatore > di SQL |
$gte | Maggiore di o uguale a, simile all'operatore >= di SQL |
$in | Corrisponde a un array, a uno qualsiasi dei valori, simile alla query in di SQL |
$lt | Minore di, simile all'operatore < di SQL |
$nin | Non corrisponde a nessun valore nell'array, simile all'operatore not in di SQL |
Dati di test
I dati della collezione inventory sono i seguenti
{ _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 (Corrispondenza uguale)
db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )
// Abbreviato, è possibile ignorare l'operatore $eq, qty = 20
db.inventory.find( { qty: 20 } )
Equivalente SQL:
select * from inventory where qty = 20
// Questo è solo un esempio, SQL non supporta il formato dei campi nidificati come item.name
select * from inventory where item.name = 20
$gt (Maggiore di)
db.inventory.find( { qty: { $gt: 20 } } )
Equivalente SQL:
select * from inventory where qty > 20
$gte (Maggiore di o uguale a)
db.inventory.find( { qty: { $gte: 20 } } )
Equivalente SQL:
select * from inventory where qty >= 20
$in
Corrisponde a uno dei valori nell'array
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
Equivalente SQL:
select * from inventory where qty in (5, 15)
$nin
Opposto all'operatore $in
db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
Equivalente SQL:
select * from inventory where qty not in (5, 15)
$lt (Minore di)
db.inventory.find( { qty: { $lt: 20 } } )
Equivalente SQL:
select * from inventory where qty < 20