MongoDB 2.4以降、アトミックfindOrCreate
の一意のインデックス(またはその他の回避策)に依存する必要がなくなりました。 操作のように。
これは$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を持つドキュメントをアップサートしてから、挿入のみのセットを実行します。どちらの場合も、ドキュメントが返されます。