В MongoDB, $nin
Операторът на заявка избира документите, при които стойността на полето не е в посочения масив или където полето не съществува.
Пример
Да предположим, че имаме колекция, наречена products
със следните документи:
{ "_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" }
Можем да използваме $nin
оператор, за да изберете само онези документи, които нямат конкретен _id
стойности.
Примерен код:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
})
Резултат:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
В този случай искахме само документи, които не съдържа _id
стойност на 1
, 2
, или 3
.
Пример 2
Ето още един пример. Този път използваме $nin
срещу друго поле.
db.products.find({
sizes: { $nin: [ "L" ] }
})
Резултат:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
В този пример приложихме $nin
до sizes
поле.
Забележете, че документ 6 е върнат, въпреки че няма sizes
поле. Това е точно както се очаква – ако полето не съществува, то е включено в $nin
резултати.
Сравненията на различни типове се оценяват според реда за сравнение на BSON.
Пример за агрегиране
Можем да използваме същия синтаксис, когато използваме $match
оператор на тръбопровод за агрегация.
Примерен код:
db.products.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } }
]
)
Резултат:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
И ето го отново, докато запитвате sizes
поле:
db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
)
Резултат:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Регулярни изрази
Можете да използвате регулярни изрази в заявката, като използвате формата /pattern/
.
Пример:
db.products.find({
sizes: { $nin: [ /^X/ ] }
})
Резултат:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
В този пример връщам всички документи, които нямат sizes
поле, което започва с X
.