In MongoDB ist der $in
Der Abfrageoperator wählt die Dokumente aus, bei denen der Wert eines Felds einem beliebigen Wert im angegebenen Array entspricht.
Der $in
Der Abfrageoperator ist nicht mit $in
zu verwechseln Aggregations-Pipeline-Operator, der einen booleschen Wert zurückgibt, der angibt, ob ein bestimmter Wert im Array enthalten ist.
Beispiel
Angenommen, wir haben eine Sammlung namens products
mit folgenden Dokumenten:
{ "_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" ] }
Wir können den $in
verwenden Operator, um nur die Dokumente mit einer bestimmten _id
auszuwählen Werte.
Beispielcode:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
})
Ergebnis:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
In diesem Fall wollten wir nur Dokumente, die eine _id
enthalten Wert von 1
, 2
, oder 3
.
Beispiel 2
Hier ist ein weiteres Beispiel. Dieses Mal verwenden wir $in
gegen ein anderes Feld.
db.products.find({
sizes: { $in: [ "L" ] }
})
Ergebnis:
{ "_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 diesem Beispiel haben wir $in
angewendet zu den sizes
Feld.
In diesem Fall hatte das erste Dokument den Wert als Zeichenfolge, während die anderen beiden Dokumente ihn als Array-Element hatten. In jedem Fall wurden alle übereinstimmenden Dokumente zurückgegeben.
Der Vergleich verschiedener Typen wird gemäß der BSON-Vergleichsreihenfolge ausgewertet.
Aggregationsbeispiel
Wir können dieselbe Syntax verwenden, wenn wir $match
verwenden Aggregation-Pipeline-Betreiber.
Beispielcode:
db.products.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } }
]
)
Ergebnis:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Und hier ist es wieder beim Abfragen der sizes
Feld:
db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
)
Ergebnis:
{ "_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 Ausdrücke
Sie können reguläre Ausdrücke in der Abfrage verwenden, indem Sie die Form /pattern/
verwenden .
Beispiel:
db.products.find({
sizes: { $in: [ /^X/ ] }
})
Ergebnis:
{ "_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 diesem Beispiel gebe ich alle Dokumente zurück, die einen sizes
haben Feld mit einem Wert, der entweder eine Zeichenfolge ist, die mit X
beginnt oder ein Array, bei dem mindestens eines der Elemente mit X
beginnt .