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