Je souhaite mettre à jour un champ dans un tableau de documents intégrés.
Mon exemple de document est:
db.students.insert(
{
first_name:'AA',
last_name:'BB',
cours_reussis:[{intitule:'PAI',note:0,name_school:'EPFC'}]
}
)
Je souhaite modifier la valeur de name_school
à "ENSA" au lieu de "EPFC".
Essaye ça. Cela peut nécessiter de petites modifications en fonction de vos autres variables, mais je pense que cela fonctionnera:
db.students.update(
{ first_name: 'AA' },
{ $set:
{
"cours_reussis.0.name_school": 'ENSA'
}
}
)
cours_reussis
est un tableau. Le 0 est l'index du tableau.
Pour votre référence: $ set
La réponse de Kalhara est correcte si vous connaissez la position du document incorporé dans votre tableau, cependant il existe une approche alternative qui peut être utilisée pour mettre à jour le premier élément du tableau correspondant sans connaître la position.
En supposant que vous mettez à jour avec un seul tableau dans vos critères de requête, l'opérateur de position ($
) peut être utilisé pour faire référence à l'élément de tableau correspondant:
db.students.update(
// Match criteria
{
first_name: 'AA',
last_name: 'BB',
'cours_reussis.name_school': 'EPFC'
},
// Update first matching array element using the positional operator ($)
{
$set: {
'cours_reussis.$.name_school': 'ENSA',
}
}
)
Vous pouvez l'utiliser pour mettre à jour le premier élément de tableau correspondant sans connaître l'index:
db.students.update(
{ first_name: 'AA',name_school:'EPFC' },
{ $set:
{
"cours_reussis.$.name_school": 'ENSA'
}
}
)