現在、次のデータセットがあります。
{
'component_id':1,
'_locales':[
{
'url': 'dutch',
'locale': 'nl_NL'
}
] (etc)
}
行をロケールで更新したい場合は、次のようなものを実行します。
db.components.update(
{'component_id': 1, '_locales.locale': 'nl_NL'},
{$set: {'_locales.$': {'url': 'new url','locale':'nl_NL'}},
true
);
これは、ロケールが存在しなくなるまで正常に機能します。
db.components.update(
{'component_id': 1, '_locales.locale': 'en_US'},
{$set: {'_locales.$': {'url': 'new url','locale':'en_US'}},
true
);
component_id には一意のインデックスがあるため、重複キーに関する例外がスローされます。
新しい「ドキュメント」を別のロケールで自動的に追加し、既に存在する場合は更新する方法はありますか? ドキュメントによると、位置演算子を使用すると、「アップサート」では機能しません。