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.
