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
.