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

2 Möglichkeiten, einen Wert an ein Array in MongoDB anzuhängen

Wenn Sie eine Sammlung von Dokumenten in MongoDB haben, die Arrays enthalten, können Sie diesen Arrays bei Bedarf neue Werte hinzufügen.

Abhängig von Ihren spezifischen Anforderungen können Sie den $push verwenden -Operator oder $addToSet Betreiber.

Der $push Betreiber

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

{ "_id" :1, "product" :"Fledermaus", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hut" , „Größen“ :[ „S“, „L“, „XL“ ] }{ „_id“ :3, „Produkt“ :„Kappe“, „Größen“ :[ „M“, „L“ ] } 

Und sagen wir, wir wollen einen Wert an das Array in Dokument 3 anhängen.

Wir können $push verwenden in Verbindung mit update() um den Wert anzuhängen:

db.products.update(
   { _id: 3 },
   { $push: { sizes: "XL" } }
) 

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

db.products.find() 

Ergebnis:

{ "_id" :1, "product" :"Fledermaus", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hut" , „Größen“ :[ „S“, „L“, „XL“ ] }{ „_id“ :3, „Produkt“ :„Kappe“, „Größen“ :[ „M“, „L“, „XL“ ] }

Wir können sehen, dass der Wert XL wurde dem Array in Dokument 3 hinzugefügt.

Der $push Der Operator kann auch mit verschiedenen Modifikatoren verwendet werden, wie z. B. $position , $sort , und $slice .

Sie können dem Array auch mehrere Werte hinzufügen, indem Sie $each verwenden Modifikator.

Siehe MongoDB $push für Beispiele.

Der $addToSet Betreiber

Das $addToSet Der Operator funktioniert ähnlich wie $push , bis auf ein paar Dinge:

  • Wenn der Wert, den Sie hinzufügen möchten, bereits im Array vorhanden ist, wird er nicht hinzugefügt.
  • Die $position , $sort , und $slice Modifikatoren können nicht mit $addToSet verwendet werden .

Angenommen, unsere Sammlung sieht so aus:

{ "_id" :1, "product" :"Fledermaus", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :„Mütze“, „Größen“ :[ „S“, „L“, „XL“ ] }{ „_id“ :3, „Produkt“ :„Mütze“, „Größen“ :[ „S“, „M“ , "L", "XL" ] }

Lassen Sie uns mehrere Werte in das Array in Dokument 2 einfügen:

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

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

db.products.find() 

Ergebnis:

{ "_id" :1, "product" :"Fledermaus", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Mütze", "Größen" :[ "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.

Dieses Beispiel verwendet den $each Modifikator, den Sie auch mit $push verwenden können Betreiber.

Ich habe nur den $each verwendet Modifikator, weil ich mehrere Werte hinzugefügt habe. Wenn ich nur einen Wert verwendet hätte, hätte ich $each weglassen können Modifikator, und die Syntax hätte eher wie das obige $push ausgesehen Beispiel.

Wie bereits erwähnt, wird der Wert nicht hinzugefügt, wenn er bereits vorhanden ist. Außerdem wird bei beiden Operatoren, wenn Sie ein Array hinzufügen, das gesamte Array als separater Wert innerhalb des vorhandenen Arrays hinzugefügt.

Siehe MongoDB $addToSet für weitere Beispiele.