Utilisez forEach() pour mettre à jour un champ de tableau dans MongoDB Shell

Mehvish Ashiq 21 juin 2022
Utilisez forEach() pour mettre à jour un champ de tableau dans MongoDB Shell

Aujourd’hui, nous allons apprendre à utiliser forEach() pour mettre à jour un champ de tableau tout en utilisant le shell MongoDB.

Utilisez forEach() pour mettre à jour un champ de tableau dans MongoDB Shell

Pour utiliser forEach(), préparons un exemple de collection nommée collection contenant deux documents. Vous pouvez également utiliser les requêtes suivantes pour continuer.

Exemple de code :

> 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 ] }
           ]
    }
]);

Ensuite, nous utilisons ces documents pour mettre à jour le champ de tableau nommé fields.items à partir de

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

à

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

Pour cela, nous pouvons utiliser un forEach() imbriqué, comme indiqué ci-dessous.

Exemple de code :

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

Exécutez la requête suivante sur le shell mongo pour voir les documents mis à jour.

Exemple de code :

> db.collection.find()

PRODUCTION:

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

Pour obtenir la sortie ci-dessus, nous lisons toutes les données de la collection et utilisons forEach() pour parcourir chaque document de la collection. Ensuite, nous utilisons un autre forEach() pour boucler sur chaque champ du document spécifié.

Ensuite, le troisième forEach() est utilisé pour itérer sur les valeurs du champ fields.items de la collection. Nous utilisons chaque valeur pour former la mise à jour souhaitée et l’enregistrons dans la variable aNewItem, qui est ensuite insérée dans le tableau newItems à l’aide de la méthode push().

Après cela, nous créons un document en utilisant les tableaux oneField._id et newItems, qui est poussé dans le tableau newFields qui est ensuite utilisé pour mettre à jour la collection.

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

Article connexe - MongoDB Array

Article connexe - MongoDB Document