Можете да използвате $addToSet, за да добавите към набор, като се уверите, че няма дублиран елемент на масива, но това няма да работи за вашия случай на „актуализиране“.
За да направите това, което искате, ще трябва да промените структурата на данните си на нещо като:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
}
}
}
Сега можете да направите актуализация на локала nl_NL само с:
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );
И нов локал също ще работи, като например с:
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );
Може би бихте искали да помислите дали локалът също е част от вложения обект, като в:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
"locale" : "nl_NL"
}
}
}
Това улеснява извличането на данни в някои случаи.