MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $nin operatore di query

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 .