MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $nin оператор за заявка

В 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 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. свързване към локален mongodb от докер контейнер

  2. Как да агрегирате по дата, когато в рамката за агрегиране е дадено пълно клеймо за време?

  3. Как да проектирате индекс на масив след размотаване на масив с MongoDB рамка за агрегиране

  4. root потребител на MongoDB

  5. Как да направя заявка NOT IN в Mongo?