Du kan bruge $addToSet til at tilføje til et sæt og sikre dig, at der ikke er noget duplikat array-element, men det vil ikke fungere for din "opdaterende" sag.
For at gøre, hvad du vil, skal du ændre din datastruktur til noget som:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
}
}
}
Nu kan du lave en opdatering på nl_NL-lokaliteten med blot:
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );
Og en ny lokalitet vil også fungere, f.eks. med:
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );
Du vil måske også overveje at have lokaliteten som en del af det indlejrede objekt, f.eks. i:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
"locale" : "nl_NL"
}
}
}
Dette gør det lettere at hente data i nogle tilfælde.