sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $in Query Operator

I MongoDB, $in frågeoperatorn väljer de dokument där värdet på ett fält är lika med valfritt värde i den angivna arrayen.

$in frågeoperatorn ska inte förväxlas med $in aggregeringspipeline-operator, som returnerar en boolean som indikerar om ett angivet värde finns i arrayen.

Exempel

Anta att vi har en samling som heter products med följande dokument:

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

Vi kan använda $in operatör för att välja just de dokument med specifik _id värden.

Exempelkod:

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

Resultat:

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

I det här fallet ville vi bara ha dokument som innehåller ett _id värdet 1 , 2 eller 3 .

Exempel 2

Här är ett annat exempel. Den här gången använder vi $in mot ett annat fält.

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

Resultat:

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

I det här exemplet använde vi $in till sizes fält.

I det här fallet hade det första dokumentet värdet som en sträng, medan de andra två dokumenten hade det som ett matriselement. Oavsett vilket, alla matchande dokument returnerades.

Jämförelser av olika typer utvärderas enligt BSON-jämförelseordningen.

Aggregationsexempel

Vi kan använda samma syntax när vi använder $match aggregeringspipeline-operatör.

Exempelkod:

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

Resultat:

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

Och här är den igen när du frågar efter sizes fält:

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

Resultat:

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

Reguljära uttryck

Du kan använda reguljära uttryck i frågan genom att använda formen /pattern/ .

Exempel:

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

Resultat:

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

I det här exemplet returnerar jag alla dokument som har en sizes fält med ett värde som antingen är en sträng som börjar med X eller en array där minst ett av elementen börjar med X .


  1. Slaget om NoSQL-databaserna - Jämför MongoDB och CouchDB

  2. kapslat undantag är redis.clients.jedis.exceptions.JedisConnectionException:Kunde inte hämta en resurs från poolen

  3. Laravel 5.1 Session och Socket.IO + Redis - Skicka meddelanden till inloggade (kända) användare och grupp av användare

  4. servern returnerade fel vid SASL-autentiseringssteget:Autentiseringen misslyckades