sql >> Database >  >> NoSQL >> MongoDB

MongoDB $in Query-operator

In MongoDB is de $in query-operator selecteert de documenten waarin de waarde van een veld gelijk is aan elke waarde in de opgegeven array.

De $in query-operator moet niet worden verward met de $in aggregatiepijplijnoperator, die een boolean retourneert die aangeeft of een gespecificeerde waarde in de array staat.

Voorbeeld

Stel dat we een verzameling hebben met de naam products met de volgende documenten:

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

We kunnen de $in . gebruiken operator om alleen die documenten met specifieke _id . te selecteren waarden.

Voorbeeldcode:

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

Resultaat:

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

In dit geval wilden we alleen documenten die een _id . bevatten waarde van 1 , 2 , of 3 .

Voorbeeld 2

Hier is nog een voorbeeld. Deze keer gebruiken we $in tegen een ander veld.

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

Resultaat:

{ "_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 dit voorbeeld hebben we $in . toegepast naar de sizes veld.

In dit geval had het eerste document de waarde als een string, terwijl de andere twee documenten het als een array-element hadden. Hoe dan ook, alle overeenkomende documenten zijn geretourneerd.

Vergelijking van verschillende typen wordt geëvalueerd volgens de BSON-vergelijkingsvolgorde.

Aggregatievoorbeeld

We kunnen dezelfde syntaxis gebruiken bij het gebruik van de $match aggregatie pijpleiding operator.

Voorbeeldcode:

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

Resultaat:

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

En hier is het weer tijdens het opvragen van de sizes veld:

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

Resultaat:

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

Regelmatige expressies

U kunt reguliere expressies in de query gebruiken door het formulier /pattern/ . te gebruiken .

Voorbeeld:

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

Resultaat:

{ "_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 dit voorbeeld retourneer ik alle documenten met een sizes veld met een waarde die ofwel een tekenreeks is die begint met X of een array waarbij ten minste één van de elementen begint met X .


  1. Redis:som van SCORES in gesorteerde set

  2. Abonneren op Meteor.Users Collection

  3. Hoe de prestaties van ClusterControl en zijn componenten te optimaliseren

  4. MongoDB hernoemen databaseveld binnen array