Use forEach() para actualizar un campo de matriz en MongoDB Shell

Mehvish Ashiq 21 junio 2022
Use forEach() para actualizar un campo de matriz en MongoDB Shell

Hoy, aprenderemos a usar forEach() para actualizar un campo de matriz mientras usamos el shell de MongoDB.

Utilice forEach() para actualizar un campo de matriz en MongoDB Shell

Para usar forEach(), preparemos una colección de muestra llamada collection que contenga dos documentos. También puede utilizar las siguientes consultas para continuar.

Código de ejemplo:

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

A continuación, usamos estos documentos para actualizar el campo de matriz llamado fields.items de

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

a

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

Para eso, podemos usar un forEach() anidado, como se indica a continuación.

Código de ejemplo:

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

Ejecute la siguiente consulta en el shell de mongo para ver los documentos actualizados.

Código de ejemplo:

> db.collection.find()

Producción :

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

Para obtener el resultado anterior, leemos todos los datos de la collection y usamos forEach() para iterar sobre cada documento de la collection. A continuación, usamos otro forEach() para recorrer cada uno de los campos del documento especificado.

Luego, el tercer forEach() se usa para iterar sobre los valores del campo fields.items de la collection. Usamos cada valor para formar la actualización deseada y la guardamos en la variable aNewItem, que luego se inserta en la matriz newItems usando el método push().

Después de eso, creamos un documento usando la matriz oneField._id y newItems, que se inserta en la matriz newFields que se usa para actualizar 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

Artículo relacionado - MongoDB Array

Artículo relacionado - MongoDB Document