$ 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"
}
}
}
これにより、場合によってはデータの取得が容易になります。