I MongoDB, $nin
frågeoperatorn väljer de dokument där fältets värde inte finns i den angivna arrayen eller där fältet inte finns.
Exempel
Anta att vi har en samling som heter products
med följande dokument:
{ "_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" }
Vi kan använda $nin
operatör för att välja bara de dokument som inte har specifik _id
värden.
Exempelkod:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
})
Resultat:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
I det här fallet ville vi bara ha dokument som inte gör det innehåller ett _id
värdet 1
, 2
eller 3
.
Exempel 2
Här är ett annat exempel. Den här gången använder vi $nin
mot ett annat fält.
db.products.find({
sizes: { $nin: [ "L" ] }
})
Resultat:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
I det här exemplet använde vi $nin
till sizes
fält.
Observera att dokument 6 returnerades, även om det inte har en sizes
fält. Detta är exakt som förväntat – om fältet inte finns ingår det i $nin
resultat.
Jämförelser av olika typer utvärderas enligt BSON-jämförelseordningen.
Aggregationsexempel
Vi kan använda samma syntax när vi använder $match
aggregeringspipeline-operatör.
Exempelkod:
db.products.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } }
]
)
Resultat:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Och här är den igen när du frågar efter sizes
fält:
db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
)
Resultat:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Reguljära uttryck
Du kan använda reguljära uttryck i frågan genom att använda formen /pattern/
.
Exempel:
db.products.find({
sizes: { $nin: [ /^X/ ] }
})
Resultat:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
I det här exemplet returnerar jag alla dokument som inte har en sizes
fält som börjar med X
.