MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $nin Abfrageoperator

In MongoDB ist der $nin Der Abfrageoperator wählt die Dokumente aus, in denen sich der Feldwert nicht im angegebenen Array befindet oder in denen das Feld nicht vorhanden ist.

Beispiel

Angenommen, wir haben eine Sammlung namens products mit folgenden Dokumenten:

{ "_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" }

Wir können den $nin verwenden Operator, um nur die Dokumente auszuwählen, die keine bestimmte _id haben Werte.

Beispielcode:

db.products.find({ 
  _id: { $nin: [ 1, 2, 3 ] } 
})

Ergebnis:

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

In diesem Fall wollten wir nur Dokumente, die nicht eine _id enthalten Wert von 1 , 2 , oder 3 .

Beispiel 2

Hier ist ein weiteres Beispiel. Dieses Mal verwenden wir $nin gegen ein anderes Feld.

db.products.find({ 
  sizes: { $nin: [ "L" ] } 
})

Ergebnis:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

In diesem Beispiel haben wir $nin angewendet zu den sizes Feld.

Beachten Sie, dass Dokument 6 zurückgegeben wurde, obwohl es keine sizes hat Feld. Dies ist genau wie erwartet – wenn das Feld nicht existiert, ist es in $nin enthalten Ergebnisse.

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: { $nin: [ 1, 2, 3 ] } } }
   ]
)

Ergebnis:

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

Und hier ist es wieder beim Abfragen der sizes Feld:

db.products.aggregate(
   [
     { $match: { sizes: { $nin: [ "L" ] } } }
   ]
)

Ergebnis:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

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: { $nin: [ /^X/ ] } 
})

Ergebnis:

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

In diesem Beispiel gebe ich alle Dokumente zurück, die keine sizes haben Feld, das mit X beginnt .