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

MongoDB $push

In MongoDB können Sie den $push verwenden Operator, um einen Wert an ein Array anzuhängen.

Sie können verschiedene Modifikatoren verwenden, um die Position des Werts im Array, die Reihenfolge der Elemente im Array festzulegen, mehrere Werte anzuhängen usw.

Beispiel

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

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“ ] } 

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" } }
) 

Ausgabe:

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

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“ ] }

Fügen Sie den Wert an einer bestimmten Position ein

Sie können den $each verwenden und $position Modifikatoren, um anzugeben, wo der Wert in das Array eingefügt werden soll.

Beispielsweise können wir einen Wert von 0 verwenden um es am Anfang des Arrays einzufügen.

Beispiel:

db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
) 

Ausgabe:

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

Der $each Modifikator fügt mehrere Werte an das Array-Feld an. In diesem Fall haben wir jedoch nur einen Wert in das Array eingefügt, um die $position zu verwenden Modifikator, muss mit dem $each erscheinen Modifikator.

Sehen wir uns die Sammlung noch einmal an:

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“ :[ „S“, „M“, „L“ , "XL" ] }

Anhängen und sortieren

Angenommen, wir haben eine Sammlung mit den folgenden Dokumenten:

db.players.find() 

Ergebnis:

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

Angenommen, wir möchten einige Werte an das Array in Dokument 3 anhängen, aber wir möchten das Array auch in aufsteigender Reihenfolge sortieren, nachdem wir den Wert angehängt haben.

Wir können dies tun:

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 5, 12 ],
           $sort: 1
        }
      } 
    }
) 

Ausgabe:

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

Wenn wir uns jetzt die Sammlung ansehen, können wir sehen, dass das dritte Dokument entsprechend geändert wurde.

db.players.find() 

Ergebnis:

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

Verwenden Sie zum Sortieren in absteigender Reihenfolge $sort: -1 .

Slice das Array

Sie können das $slice verwenden Modifikator, um die Anzahl der Elemente im Array zu begrenzen.

Lassen Sie uns zum Beispiel einen weiteren Wert zum Array hinzufügen, aber dann das Array auf eine bestimmte Anzahl von Elementen aufteilen.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $slice: 3
        }
      } 
    }
) 

Ausgabe:

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

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

db.players.find() 

Ergebnis:

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

In diesem Fall wurde das Array aufgeteilt, aber der Wert, den wir angehängt haben, landete nicht einmal im endgültigen Array. Dies liegt daran, dass der Wert an das Array angehängt wurde und wir keinen $sort verwendet haben Operation, und so blieb der Wert am Ende des Arrays, bevor das Array in seine ersten drei Elemente aufgeteilt wurde.

Hier ist es wieder, außer diesmal mit dem $sort Modifikator.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $sort: 1,
           $slice: 3
        }
      } 
    }
) 

Ausgabe:

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

Überprüfen Sie die Sammlung:

db.players.find() 

Ergebnis:

{ "_id" :1, "scores" :[ 1, 5, 3 ] }{ "_id" :2, "scores" :[ 8, 17, 18 ] }{ "_id" :3, "scores " :[ 3, 5, 8 ] }

Wert nur anhängen, wenn er nicht vorhanden ist

Wenn Sie möchten, dass der Wert nur angehängt wird, wenn er noch nicht im Array vorhanden ist, sollten Sie die Verwendung von $addToSet in Erwägung ziehen Operator.