私のようなコレクションがあるとします。私は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}
]
はalexi
と1
として提供されます。私は要求する。 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がクライアントから来ていると私はその値を再生しません。では、どうやってこのような状況に対処できますか?私が言ったように、コレクションにデータを挿入/更新できるクエリを作成したいと思います。