1. ホーム
  2. mongodb

[解決済み] Mongoの$addToSetにキーを指定することはできますか?

2023-07-27 21:07:09

質問

ある文書があります。

{ '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 をクエリオブジェクトで修飾することで、もし name がすでに profile_set . シェルでは

db.coll.update(
    {_id: id, 'profile_set.name': {$ne: 'nick'}}, 
    {$push: {profile_set: {'name': 'nick', 'options': 2}}})

というわけで、これで実行されるのは $push にマッチする _id がなく、かつ profile_set 要素がない場合は name'nick' .