Verwendung von forEach() zur Aktualisierung eines Array-Feldes in der MongoDB-Shell

Mehvish Ashiq 21 Juni 2022
Verwendung von forEach() zur Aktualisierung eines Array-Feldes in der MongoDB-Shell

Heute lernen wir, wie man forEach() verwendet, um ein Array-Feld zu aktualisieren, während man die MongoDB-Shell verwendet.

Verwenden von forEach() zum Aktualisieren eines Array-Feldes in der MongoDB-Shell

Um forEach() zu verwenden, bereiten wir eine Beispielsammlung namens collection vor, die zwei Dokumente enthält. Sie können auch die folgenden Abfragen verwenden, um fortzufahren.

Beispielcode:

> use updateArrayField
> db.createCollection('collection');
> db.collection.insertMany([
    {
          "name": "Mehvish",
          "gender": "Female",
          "fields" : [
              { "_id" : 1, "items" : [ 1,3,4,5,6,7 ] }
           ]
    },
    {
          "name": "Thomas Christopher",
          "gender": "Male",
          "fields" : [
              { "_id" : 1, "items" : [ 1,3,4,5,6,7 ] }
           ]
    }
]);

Als nächstes verwenden wir diese Dokumente, um das Array-Feld mit dem Namen fields.items von zu aktualisieren

"items" : [ 1,3,4,5,6,7]

zu

"items" : [
   {item: 1, key: 0},
   {item: 3, key: 0},
   {item: 4, key: 0},
   {item: 5, key: 0},
   {item: 6, key: 0},
   {item: 7, key: 0}
]

Dafür können wir ein verschachteltes forEach() verwenden, wie unten angegeben.

Beispielcode:

> var table = db.collection.find();

> table.forEach(function( oneRow ) {
    var newFields = [];

    oneRow.fields.forEach( function( oneField ){
        var newItems = [];

        oneField.items.forEach( function( item ){
            var aNewItem = { item: parseInt(item), key: 0 };
            newItems.push( aNewItem );
        } );

        newFields.push({ _id: oneField._id, items: newItems });
    } )
    db.collection.update(
        { _id: oneRow._id },
        { "$set": { "fields": newFields } }
    );
});

Führen Sie die folgende Abfrage in der Mongo-Shell aus, um die aktualisierten Dokumente anzuzeigen.

Beispielcode:

> db.collection.find()

AUSGANG:

{
    "_id" : ObjectId("62a708054eb9c63e48daeba4"),
    "name" : "Mehvish",
    "gender" : "Female",
    "fields" : [
        {
            "_id" : 1,
            "items" : [
                { "item" : 1, "key" : 0 },
                { "item" : 3, "key" : 0 },
                { "item" : 4, "key" : 0 },
                { "item" : 5, "key" : 0 },
                { "item" : 6, "key" : 0 },
                { "item" : 7, "key" : 0 }
            ]
        }
    ]
}
{
    "_id" : ObjectId("62a708054eb9c63e48daeba5"),
    "name" : "Thomas Christopher",
    "gender" : "Male",
    "fields" : [
        {
            "_id" : 1,
            "items" : [
                { "item" : 1, "key" : 0 },
                { "item" : 3, "key" : 0 },
                { "item" : 4, "key" : 0 },
                { "item" : 5, "key" : 0 },
                { "item" : 6, "key" : 0 },
                { "item" : 7, "key" : 0 }
            ]
       }
   ]
}

Um die obige Ausgabe zu erhalten, lesen wir alle Daten aus der Sammlung und verwenden forEach(), um über jedes einzelne Dokument der Sammlung zu iterieren. Als nächstes verwenden wir ein weiteres forEach(), um jedes einzelne Feld des angegebenen Dokuments zu durchlaufen.

Dann wird mit dem dritten forEach() über die Werte des Feldes fields.items aus der collection iteriert. Aus jedem Wert bilden wir das gewünschte Update und speichern es in der Variable aNewItem, die mit der Methode push() weiter in das Array newItems eingefügt wird.

Danach erstellen wir ein Dokument mit dem Array oneField._id und newItems, das in das Array newFields geschoben wird, das weiter verwendet wird, um die collection zu aktualisieren.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - MongoDB Array

Verwandter Artikel - MongoDB Document