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.
Artículo relacionado - MongoDB Array
- Encuentre un documento específico con matriz en MongoDB
- MongoDB Agregar elemento a la matriz
- MongoDB Eliminar elemento de un array
