In MongoDB is de $in
query-operator selecteert de documenten waarin de waarde van een veld gelijk is aan elke waarde in de opgegeven array.
De $in
query-operator moet niet worden verward met de $in
aggregatiepijplijnoperator, die een boolean retourneert die aangeeft of een gespecificeerde waarde in de array staat.
Voorbeeld
Stel dat we een verzameling hebben met de naam products
met de volgende documenten:
{ "_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" ] }
We kunnen de $in
. gebruiken operator om alleen die documenten met specifieke _id
. te selecteren waarden.
Voorbeeldcode:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
})
Resultaat:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
In dit geval wilden we alleen documenten die een _id
. bevatten waarde van 1
, 2
, of 3
.
Voorbeeld 2
Hier is nog een voorbeeld. Deze keer gebruiken we $in
tegen een ander veld.
db.products.find({
sizes: { $in: [ "L" ] }
})
Resultaat:
{ "_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 dit voorbeeld hebben we $in
. toegepast naar de sizes
veld.
In dit geval had het eerste document de waarde als een string, terwijl de andere twee documenten het als een array-element hadden. Hoe dan ook, alle overeenkomende documenten zijn geretourneerd.
Vergelijking van verschillende typen wordt geëvalueerd volgens de BSON-vergelijkingsvolgorde.
Aggregatievoorbeeld
We kunnen dezelfde syntaxis gebruiken bij het gebruik van de $match
aggregatie pijpleiding operator.
Voorbeeldcode:
db.products.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } }
]
)
Resultaat:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
En hier is het weer tijdens het opvragen van de sizes
veld:
db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
)
Resultaat:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Regelmatige expressies
U kunt reguliere expressies in de query gebruiken door het formulier /pattern/
. te gebruiken .
Voorbeeld:
db.products.find({
sizes: { $in: [ /^X/ ] }
})
Resultaat:
{ "_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 dit voorbeeld retourneer ik alle documenten met een sizes
veld met een waarde die ofwel een tekenreeks is die begint met X
of een array waarbij ten minste één van de elementen begint met X
.