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

Opérateur de requête MongoDB $nin

Dans MongoDB, le $nin L'opérateur de requête sélectionne les documents où la valeur du champ n'est pas dans le tableau spécifié ou où le champ n'existe pas.

Exemple

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

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

Nous pouvons utiliser le $nin opérateur pour sélectionner uniquement les documents qui n'ont pas de _id spécifique valeurs.

Exemple de code :

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

Résultat :

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

Dans ce cas, nous ne voulions que des documents qui ne sont pas contenir un _id valeur de 1 , 2 , ou 3 .

Exemple 2

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

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

Résultat :

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

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

Notez que le document 6 a été renvoyé, même s'il n'a pas de sizes domaine. C'est exactement comme prévu - si le champ n'existe pas, il est inclus dans le $nin résultats.

La comparaison de différents types est évaluée selon 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: { $nin: [ 1, 2, 3 ] } } }
   ]
)

Résultat :

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

Et le revoilà en interrogeant les sizes champ :

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

Résultat :

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

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: { $nin: [ /^X/ ] } 
})

Résultat :

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

Dans cet exemple, je renvoie tous les documents qui n'ont pas de sizes champ commençant par X .