私は文書を持っています:
{ 'profile_set' :
[
{ 'name' : 'nick', 'options' : 0 },
{ 'name' : 'joe', 'options' : 2 },
{ 'name' : 'burt', 'options' : 1 }
]
}
また、名前がまだ存在しない場合(オプションに関係なく)、profile_setセットに新しいドキュメントを追加したいと考えています。
したがって、この例で追加しようとした場合:
{'name' : 'matt', 'options' : 0}
それを追加する必要がありますが、追加
{'name' : 'nick', 'options' : 2}
nick
が異なっていても、名前がoption
のドキュメントがすでに存在するため、何もしないでください。
Mongoは要素全体に対して一致するようであり、同じかどうかを確認することになり、
profile_set containing [{'name' : 'nick', 'options' : 0}, {'name' : 'nick', 'options' : 2}]
$ addToSetでこれを行う方法はありますか、別のコマンドをプッシュする必要がありますか?
update
がprofile_set
に既に存在する場合、更新を防止するクエリオブジェクトでname
を修飾できます。シェルで:
db.coll.update(
{_id: id, 'profile_set.name': {$ne: 'nick'}},
{$Push: {profile_set: {'name': 'nick', 'options': 2}}})
そのため、これは、一致する$Push
があり、name
が_id
であるprofile_set
要素がないドキュメントに対して'nick'
のみを実行します。