In MongoDB, il $in l'operatore di query seleziona i documenti in cui il valore di un campo è uguale a qualsiasi valore nella matrice specificata.
Il $in l'operatore query non deve essere confuso con $in operatore della pipeline di aggregazione, che restituisce un valore booleano che indica se un valore specificato è nella matrice.
Esempio
Supponiamo di avere una collezione chiamata products con i seguenti documenti:
{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 4, "prod" : "Shirt", "sizes" : "M" }
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Possiamo usare il $in operatore per selezionare solo quei documenti con _id specifico valori.
Codice di esempio:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
}) Risultato:
{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
In questo caso, volevamo solo documenti che contengono un _id valore di 1 , 2 o 3 .
Esempio 2
Ecco un altro esempio. Questa volta utilizziamo $in contro un campo diverso.
db.products.find({
sizes: { $in: [ "L" ] }
}) Risultato:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
In questo esempio abbiamo applicato $in alle sizes campo.
In questo caso, il primo documento aveva il valore come stringa, mentre gli altri due documenti lo avevano come elemento dell'array. In ogni caso, tutti i documenti corrispondenti sono stati restituiti.
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: { $in: [ 1, 2, 3 ] } } }
]
) Risultato:
{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Ed eccolo di nuovo mentre si interrogano le sizes campo:
db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
) Risultato:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] } Espressioni regolari
È possibile utilizzare espressioni regolari nella query utilizzando il modulo /pattern/ .
Esempio:
db.products.find({
sizes: { $in: [ /^X/ ] }
}) Risultato:
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
In questo esempio, restituisco tutti i documenti che hanno un sizes campo con un valore che è una stringa che inizia con X o un array in cui almeno uno degli elementi inizia con X .