Możesz użyć $addToSet, aby dodać do zestawu, upewniając się, że nie ma zduplikowanego elementu tablicy, ale to nie zadziała w przypadku „aktualizacji”.
Aby robić to, co chcesz, musisz zmienić strukturę danych na coś takiego:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
}
}
}
Teraz możesz zaktualizować lokalizację nl_NL za pomocą tylko:
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );
Nowa lokalizacja też będzie działać, na przykład z:
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );
Być może warto rozważyć umieszczenie ustawień regionalnych jako części obiektu zagnieżdżonego, na przykład:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
"locale" : "nl_NL"
}
}
}
Ułatwia to w niektórych przypadkach odzyskanie danych.