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