MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $addToSet

In MongoDB ist das $addToSet -Operator fügt einem Array einen Wert hinzu, es sei denn, der Wert ist bereits im Array vorhanden.

Es ähnelt dem $push -Operator, außer dass $push fügt den Wert hinzu, auch wenn der Wert bereits vorhanden ist.

Beispiel

Angenommen, wir haben eine Sammlung namens products mit folgenden Dokumenten:

db.products.find()

Ergebnis:

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

Wir können $addToSet verwenden um einen Wert an eines dieser Arrays anzuhängen.

Beispiel:

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

Ausgabe:

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

Sehen wir uns unsere Sammlung noch einmal an, um die Änderung zu überprüfen:

db.products.find()

Ergebnis:

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

Doppelte Werte

Wenn Sie versuchen, einen Wert einzufügen, der bereits im Array vorhanden ist, passiert nichts. Mit anderen Worten, $addToSet fügt den Wert nur ein, wenn er noch nicht existiert.

Hier ist ein Beispiel für den Versuch, einen bereits vorhandenen Wert einzufügen.

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

Ausgabe:

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

Diese Nachricht teilt uns mit, dass es ein übereinstimmendes Dokument gab (d. h. das Dokument mit einer _id von 1 ), aber es gab keine Änderungen.

Im vorherigen Beispiel haben wir "nModified" : 1 gesehen , aber in diesem Beispiel sehen wir "nModified" : 0 . Das liegt daran, dass der Wert nicht existierte, als wir ihn im vorherigen Beispiel eingefügt haben, aber in diesem Beispiel ist er bereits vorhanden.

Wir können dies überprüfen, indem wir uns die Sammlung erneut ansehen:

db.products.find()

Ergebnis:

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

Mehrere Werte hinzufügen

Sie können den $each verwenden Modifikator, um mehrere Werte an ein Array anzuhängen.

Beispiel:

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

Ausgabe:

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

Lassen Sie uns nun die Sammlung erneut überprüfen:

db.products.find()

Ergebnis:

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

Wir können sehen, dass die beiden Werte wie erwartet an das Array in Dokument 2 angehängt wurden.

Fügen Sie dem Array ein Array hinzu

Sie können auch ein ganzes Array an das Array anhängen. Wenn Sie dies tun, wird das gesamte Array als eigenes separates Array angehängt.

Angenommen, wir haben eine Sammlung wie diese:

db.foo.find()

Ergebnis:

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

Wir können ein Array wie folgt an ein Array anhängen:

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

Ausgabe:

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

Prüfen Sie die Sammlung:

db.foo.find()

Ergebnis:

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