web-dev-qa-db-ja.com

Mongoで$ addToSetのキーを指定できますか?

私は文書を持っています:

{ '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でこれを行う方法はありますか、別のコマンドをプッシュする必要がありますか?

64
nickponline

updateprofile_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'のみを実行します。

85
JohnnyHK