V MongoDB, $nin Operátor dotazu vybere dokumenty, kde hodnota pole není v zadaném poli nebo kde pole neexistuje.
Příklad
Předpokládejme, že máme kolekci nazvanou products s následujícími dokumenty:
{ "_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" }
Můžeme použít $nin operátora k výběru pouze těch dokumentů, které nemají konkrétní _id hodnoty.
Příklad kódu:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
}) Výsledek:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }
V tomto případě jsme chtěli pouze dokumenty, které není obsahovat _id hodnotu 1 , 2 , nebo 3 .
Příklad 2
Zde je další příklad. Tentokrát používáme $nin proti jinému poli.
db.products.find({
sizes: { $nin: [ "L" ] }
}) Výsledek:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }
V tomto příkladu jsme použili $nin na sizes pole.
Všimněte si, že dokument 6 byl vrácen, i když nemá sizes pole. To je přesně podle očekávání – pokud pole neexistuje, je zahrnuto v $nin výsledky.
Porovnání různých typů se vyhodnocují podle pořadí porovnání BSON.
Příklad agregace
Stejnou syntaxi můžeme použít při použití $match operátor agregačního kanálu.
Příklad kódu:
db.products.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } }
]
) Výsledek:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }
A tady je to znovu při dotazování na sizes pole:
db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
) Výsledek:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" } Regulární výrazy
V dotazu můžete použít regulární výrazy pomocí formuláře /pattern/ .
Příklad:
db.products.find({
sizes: { $nin: [ /^X/ ] }
}) Výsledek:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }
V tomto příkladu vrátím všechny dokumenty, které nemají sizes pole, které začíná X .