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
.