2016-06-29 27 views
0

私のようなコレクションがあるとします。私は1つの更新プログラムを書き、次のような状況が含まデシベルクエリを挿入したいデータの挿入/更新

[ 
    {name: "alex" , id:1 , age: 23}, 
    {name: "felix" , id:2 , age: 29}, 
    {name: "lenix" , id:3 , age: 45}, 
] 

  • nameが存在する場合は更新し、そうでない場合はdbに挿入します。 db.collection.update({name: name_} ,{name: name_, id: id_, age: age_ }, {upsert: true})

しかし、主な問題はこれです。

私はクライアントからIDフィールドと名前フィールドを取得します。 nameが変更された場合

db.collection.update({name: name_} ,{name: name_, id: id_, age: age_ }, {upsert: true})

は私にエラーを与えます。 idは同じなので、新しい名前の値を持つデータを挿入することはできますが、古いIDフィールドと同じIDフィールドを挿入することはできません。

例をあげてみましょう。私が持っています;クライアント、名前とidフィールドから

[ 
    {name: "alex" , id:1 , age: 23} 
] 

alexi1として提供されます。私は要求する。 db.collection.update({name: "alexi"} ,{name: "alexi", id: 1, age: 43}, {upsert: true}) すでにIDが1のデータがあります。挿入によってエラーが返されます。

私はidフィールドをサーバに割り当てます。

if(there is id field from client) 
    id_ = id; 
else 
    id_ = some random value 

だから、このような状況では、idがクライアントから来ていると私はその値を再生しません。では、どうやってこのような状況に対処できますか?私が言ったように、コレクションにデータを挿入/更新できるクエリを作成したいと思います。

答えて

0

mongoose then unique:true constraint from shcema。そのフィールドに重複した値を追加することができます。

関連する問題