sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $in Query Operator

V MongoDB, $in Operátor dotazu vybere dokumenty, kde se hodnota pole rovná jakékoli hodnotě v zadaném poli.

$in Operátor dotazu nelze zaměňovat s $in operátor agregačního kanálu, který vrací boolean označující, zda je zadaná hodnota v poli.

Příklad

Předpokládejme, že máme kolekci nazvanou products s následujícími dokumenty:

{ "_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" ] }

Můžeme použít $in operátora, který vybere pouze dokumenty s konkrétním _id hodnoty.

Příklad kódu:

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

Výsledek:

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

V tomto případě jsme chtěli pouze dokumenty, které obsahují _id hodnotu 1 , 2 , nebo 3 .

Příklad 2

Zde je další příklad. Tentokrát používáme $in proti jinému poli.

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

Výsledek:

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

V tomto příkladu jsme použili $in na sizes pole.

V tomto případě měl první dokument hodnotu jako řetězec, zatímco další dva dokumenty ji měly jako prvek pole. V každém případě byly všechny odpovídající dokumenty vráceny.

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: { $in: [ 1, 2, 3 ] } } }
   ]
)

Výsledek:

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

A tady je to znovu při dotazování na sizes pole:

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

Výsledek:

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

Regulární výrazy

V dotazu můžete použít regulární výrazy pomocí formuláře /pattern/ .

Příklad:

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

Výsledek:

{ "_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" ] }

V tomto příkladu vrátím všechny dokumenty, které mají sizes pole s hodnotou, která je buď řetězcem začínajícím X nebo pole, kde alespoň jeden z prvků začíná X .


  1. Nastavte výchozí datum při vkládání dokumentu s polem time.Time

  2. MongoDB $ cos

  3. Automaticky stárnou dokumenty sbírky MongoDB

  4. BsonSerializationException při serializaci slovníku<DateTime,T> na BSON