MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Opérateur de requête MongoDB $in

Dans MongoDB, le $in L'opérateur de requête sélectionne les documents où la valeur d'un champ est égale à n'importe quelle valeur dans le tableau spécifié.

Le $in l'opérateur de requête ne doit pas être confondu avec le $in opérateur de pipeline d'agrégation, qui renvoie un booléen indiquant si une valeur spécifiée se trouve dans le tableau.

Exemple

Supposons que nous ayons une collection appelée products avec les documents suivants :

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

Nous pouvons utiliser le $in opérateur pour sélectionner uniquement les documents avec un _id spécifique valeurs.

Exemple de code :

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

Résultat :

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

Dans ce cas, nous voulions uniquement des documents contenant un _id valeur de 1 , 2 , ou 3 .

Exemple 2

Voici un autre exemple. Cette fois, nous utilisons $in par rapport à un champ différent.

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

Résultat :

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

Dans cet exemple, nous avons appliqué $in aux sizes domaine.

Dans ce cas, le premier document avait la valeur sous forme de chaîne, tandis que les deux autres documents l'avaient sous forme d'élément de tableau. Dans tous les cas, tous les documents correspondants ont été renvoyés.

La comparaison de différents types est évaluée en fonction de l'ordre de comparaison BSON.

Exemple d'agrégation

Nous pouvons utiliser la même syntaxe lors de l'utilisation du $match opérateur de pipeline d'agrégation.

Exemple de code :

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

Résultat :

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

Et le revoilà en interrogeant les sizes champ :

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

Résultat :

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

Expressions régulières

Vous pouvez utiliser des expressions régulières dans la requête en utilisant le formulaire /pattern/ .

Exemple :

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

Résultat :

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

Dans cet exemple, je renvoie tous les documents qui ont un sizes champ avec une valeur qui est soit une chaîne qui commence par X ou un tableau où au moins un des éléments commence par X .