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

MongoDB $addToSet

Dans MongoDB, le $addToSet ajoute une valeur à un tableau sauf si la valeur est déjà présente dans le tableau.

C'est similaire au $push opérateur, sauf que $push ajoute la valeur même si la valeur est déjà présente.

Exemple

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

db.products.find()

Résultat :

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Nous pouvons utiliser $addToSet pour ajouter une valeur à l'un de ces tableaux.

Exemple :

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Sortie :

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Jetons un autre coup d'œil à notre collection pour vérifier le changement :

db.products.find()

Résultat :

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Valeurs en double

Si vous essayez d'insérer une valeur qui existe déjà dans le tableau, rien ne se passe. En d'autres termes, $addToSet n'insère la valeur que si elle n'existe pas déjà.

Voici un exemple de tentative d'insertion d'une valeur qui existe déjà.

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Sortie :

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Ce message nous indique qu'il y avait un document correspondant (c'est-à-dire le document avec un _id de 1 ), mais il n'y a eu aucune modification.

Dans l'exemple précédent nous avons vu "nModified" : 1 , mais dans cet exemple nous voyons "nModified" : 0 . C'est parce que la valeur n'existait pas lorsque nous l'avons insérée dans l'exemple précédent, mais dans cet exemple, elle existe déjà.

Nous pouvons le vérifier en examinant à nouveau la collection :

db.products.find()

Résultat :

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Ajouter plusieurs valeurs

Vous pouvez utiliser le $each modificateur pour ajouter plusieurs valeurs à un tableau.

Exemple :

db.products.update(
   { _id: 2 },
   { 
     $addToSet: { 
        sizes: {
           $each: [ "XXL", "XXXL" ]
        }
      } 
    }
)

Sortie :

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Maintenant, vérifions à nouveau la collection :

db.products.find()

Résultat :

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Nous pouvons voir que les deux valeurs ont été ajoutées au tableau dans le document 2 comme prévu.

Ajouter un tableau au tableau

Vous pouvez également ajouter un tableau entier au tableau. Lorsque vous faites cela, le tableau entier est ajouté comme son propre tableau séparé.

Supposons que nous ayons une collection comme celle-ci :

db.foo.find()

Résultat :

{ "_id" : 1, "bar" : [ 1, 5, 3 ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }

Nous pouvons ajouter un tableau à un tableau comme ceci :

db.foo.update(
   { _id: 1 },
   { $addToSet: { bar: [ 7, 8, 9] } }
)

Sortie :

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Vérifiez la collection :

db.foo.find()

Résultat :

{ "_id" : 1, "bar" : [ 1, 5, 3, [ 7, 8, 9 ] ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }