In MongoDB, de $nin
query-operator selecteert de documenten waar de waarde van het veld niet in de opgegeven matrix staat of waar het veld niet bestaat.
Voorbeeld
Stel dat we een verzameling hebben met de naam products
met de volgende documenten:
{ "_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" }
We kunnen de $nin
. gebruiken operator om alleen die documenten te selecteren die geen specifieke _id
. hebben waarden.
Voorbeeldcode:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
})
Resultaat:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
In dit geval wilden we alleen documenten die niet bevatten een _id
waarde van 1
, 2
, of 3
.
Voorbeeld 2
Hier is nog een voorbeeld. Deze keer gebruiken we $nin
tegen een ander veld.
db.products.find({
sizes: { $nin: [ "L" ] }
})
Resultaat:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
In dit voorbeeld hebben we $nin
. toegepast naar de sizes
veld.
Merk op dat document 6 is geretourneerd, ook al heeft het geen sizes
veld. Dit is precies zoals verwacht - als het veld niet bestaat, is het opgenomen in de $nin
resultaten.
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: { $nin: [ 1, 2, 3 ] } } }
]
)
Resultaat:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
En hier is het weer tijdens het opvragen van de sizes
veld:
db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
)
Resultaat:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Regelmatige expressies
U kunt reguliere expressies in de query gebruiken door gebruik te maken van het formulier /pattern/
.
Voorbeeld:
db.products.find({
sizes: { $nin: [ /^X/ ] }
})
Resultaat:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
In dit voorbeeld retourneer ik alle documenten die geen sizes
. hebben veld dat begint met X
.