U kunt $addToSet gebruiken om toe te voegen aan een set en ervoor zorgen dat er geen dubbel array-element is, maar dat zal niet werken voor uw "update"-geval.
Om te doen wat u wilt, moet u uw gegevensstructuur wijzigen in iets als:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
}
}
}
Nu kun je een update doen op de nl_NL locale met slechts:
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );
En een nieuwe landinstelling zal ook werken, zoals met:
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );
U kunt overwegen om de landinstelling ook als onderdeel van het geneste object te gebruiken, zoals in:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
"locale" : "nl_NL"
}
}
}
Dit maakt het in sommige gevallen gemakkelijker om gegevens op te halen.