In MongoDB, il $nin
l'operatore di query seleziona i documenti in cui il valore del campo non è nella matrice specificata o in cui il campo non esiste.
Esempio
Supponiamo di avere una collezione chiamata products
con i seguenti documenti:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] } { "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Possiamo usare il $nin
operatore per selezionare solo quei documenti che non hanno un _id
specifico valori.
Codice di esempio:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
})
Risultato:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
In questo caso, volevamo solo documenti che non contenere un _id
valore di 1
, 2
o 3
.
Esempio 2
Ecco un altro esempio. Questa volta utilizziamo $nin
contro un campo diverso.
db.products.find({
sizes: { $nin: [ "L" ] }
})
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
In questo esempio abbiamo applicato $nin
alle sizes
campo.
Nota che il documento 6 è stato restituito, anche se non ha un sizes
campo. Questo è esattamente come previsto:se il campo non esiste, è incluso nel $nin
risultati.
Il confronto di diversi tipi viene valutato in base all'ordine di confronto BSON.
Esempio di aggregazione
Possiamo usare la stessa sintassi quando utilizziamo $match
operatore della pipeline di aggregazione.
Codice di esempio:
db.products.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } }
]
)
Risultato:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Ed eccolo di nuovo mentre si interrogano le sizes
campo:
db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
)
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Espressioni regolari
È possibile utilizzare espressioni regolari nella query utilizzando il modulo /pattern/
.
Esempio:
db.products.find({
sizes: { $nin: [ /^X/ ] }
})
Risultato:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
In questo esempio, restituisco tutti i documenti che non hanno un sizes
campo che inizia con X
.