タイトルの通り、_id でドキュメントの検索 (1 つ) を実行し、存在しない場合は作成し、見つかったか作成されたかに関係なく、コールバックで返されるようにします。
findAndModify がそうすると読んだので、存在する場合は更新したくありません。これに関して Stackoverflow で他の多くの質問を見ましたが、やはり何も更新したくありません。
作成(存在しない)することによって、それが実際にみんなが話しているアップデートであるかどうかはわかりません。すべてが非常に混乱しています :(
ベストアンサー1
findOrCreate
MongoDB 2.4 以降では、アトミックな操作に一意のインデックス (またはその他の回避策) に依存する必要がなくなりました。
これはオペレーター$setOnInsert
2.4 の新機能で、ドキュメントを挿入するときにのみ実行される更新を指定できます。
これを オプションと組み合わせると、 を使用してアトミックな操作を実現upsert
できます。findAndModify
findOrCreate
db.collection.findAndModify({
query: { _id: "some potentially existing id" },
update: {
$setOnInsert: { foo: "bar" }
},
new: true, // return new doc if one is upserted
upsert: true // insert the document if it does not exist
})
挿入されるドキュメントにのみ影響するため$setOnInsert
、既存のドキュメントが見つかった場合は変更は行われません。ドキュメントが存在しない場合は、指定された _id を持つドキュメントを upsert し、挿入のみのセットを実行します。どちらの場合も、ドキュメントが返されます。