Vous pouvez utiliser $addToSet pour ajouter à un ensemble en vous assurant qu'il n'y a pas d'élément de tableau en double, mais cela ne fonctionnera pas pour votre cas de "mise à jour".
Afin de faire ce que vous voulez, vous devrez changer votre structure de données en quelque chose comme :
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
}
}
}
Vous pouvez maintenant faire une mise à jour sur la locale nl_NL avec juste :
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );
Et un nouveau paramètre régional fonctionnera également, comme avec :
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );
Vous voudrez peut-être envisager d'avoir les paramètres régionaux dans le cadre de l'objet imbriqué également, comme dans :
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
"locale" : "nl_NL"
}
}
}
Cela facilite la récupération des données dans certains cas.