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

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

В MongoDB, $in операторът за заявка избира документите, при които стойността на поле е равна на всяка стойност в посочения масив.

$in операторът на заявка не трябва да се бърка с $in оператор на конвейер за агрегиране, който връща булева стойност, показваща дали определена стойност е в масива.

Пример

Да предположим, че имаме колекция, наречена products със следните документи:

{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 4, "prod" : "Shirt", "sizes" : "M" }
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

Можем да използваме $in оператор, за да изберете само тези документи със специфичен _id стойности.

Примерен код:

db.products.find({ 
  _id: { $in: [ 1, 2, 3 ] } 
})

Резултат:

{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }

В този случай искахме само документи, които съдържат _id стойност на 1 , 2 , или 3 .

Пример 2

Ето още един пример. Този път използваме $in срещу друго поле.

db.products.find({ 
  sizes: { $in: [ "L" ] } 
})

Резултат:

{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

В този пример приложихме $in до sizes поле.

В този случай първият документ имаше стойност като низ, докато другите два документа я имаха като елемент на масив. Така или иначе, всички съответстващи документи бяха върнати.

Сравненията на различни типове се оценяват според порядъка за сравнение на BSON.

Пример за агрегиране

Можем да използваме същия синтаксис, когато използваме $match оператор на тръбопровод за агрегация.

Примерен код:

db.products.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } }
   ]
)

Резултат:

{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }

И ето го отново, докато запитвате sizes поле:

db.products.aggregate(
   [
     { $match: { sizes: { $in: [ "L" ] } } }
   ]
)

Резултат:

{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

Регулярни изрази

Можете да използвате регулярни изрази в заявката, като използвате формата /pattern/ .

Пример:

db.products.find({ 
  sizes: { $in: [ /^X/ ] } 
})

Резултат:

{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

В този пример връщам всички документи, които имат sizes поле със стойност, която е или низ, който започва с X или масив, където поне един от елементите започва с X .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Използване на резервни копия за коригиране на често срещани сценарии за отказ за MongoDB

  2. Как правилно да се справяме с миграциите на схемата на mongoose?

  3. Групиране по сума mongodb

  4. Как да намерите заявки, които не използват индекси или са бавни в mongodb

  5. MongoDB - Разлика между индекс на текстово поле и текстов индекс?