I MongoDB er $in
forespørgselsoperator vælger de dokumenter, hvor værdien af et felt er lig med enhver værdi i det angivne array.
$in
forespørgselsoperator må ikke forveksles med $in
aggregeringspipeline-operator, som returnerer en boolean, der angiver, om en specificeret værdi er i arrayet.
Eksempel
Antag, at vi har en samling kaldet products
med følgende dokumenter:
{ "_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" ] }
Vi kan bruge $in
operatør for at vælge netop de dokumenter med specifik _id
værdier.
Eksempelkode:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
})
Resultat:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
I dette tilfælde ønskede vi kun dokumenter, der indeholder en _id
værdi af 1
, 2
eller 3
.
Eksempel 2
Her er et andet eksempel. Denne gang bruger vi $in
mod et andet felt.
db.products.find({
sizes: { $in: [ "L" ] }
})
Resultat:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
I dette eksempel anvendte vi $in
til sizes
Mark.
I dette tilfælde havde det første dokument værdien som en streng, mens de to andre dokumenter havde det som et array-element. Uanset hvad, blev alle matchende dokumenter returneret.
Sammenligning af forskellige typer evalueres i henhold til BSON-sammenligningsrækkefølgen.
Aggregationseksempel
Vi kan bruge den samme syntaks, når vi bruger $match
aggregeringsrørledningsoperatør.
Eksempelkode:
db.products.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } }
]
)
Resultat:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Og her er den igen, mens du spørger efter sizes
felt:
db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
)
Resultat:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Regulære udtryk
Du kan bruge regulære udtryk i forespørgslen ved at bruge formen /pattern/
.
Eksempel:
db.products.find({
sizes: { $in: [ /^X/ ] }
})
Resultat:
{ "_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" ] }
I dette eksempel returnerer jeg alle dokumenter, der har en sizes
felt med en værdi, der enten er en streng, der starter med X
eller et array, hvor mindst et af elementerne starter med X
.