にこの技術の詳細な説明、それは操作のようなアトミックfindOrCreate
のためのユニークなインデックス(またはその他の回避策)に頼る必要がなくなりました。
これは、ドキュメントの挿入時にのみ行われる更新を指定できるようにするための、the $setOnInsert
operatorの新機能です。
これは、upsert
オプションと組み合わせて、findAndModify
を使用して、findOrCreate
のような操作を実現できることを意味します。 $setOnInsert
として
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
})
のみ挿入された文書に影響し、既存の文書が発見された場合、何も変更は行われません。文書が存在しない場合は、指定された_idを持つ文書をアップサートし、次に挿入のみを実行します。どちらの場合も、文書が返されます。
コードはmongodbシェルで使用されますが、node.jsコードでどのように使用するのですか? – Gank
私のコードはnode.jsに新しいデータベースを挿入できません。 – Gank
@Gankノードにmongodbネイティブドライバを使用している場合、構文は 'collectionと似ています。findAndModify({_ id: 'theId'}、<あなたのソートオプション>、{$ setOnInsert:{foo: 'bar'}}、{new:true、upsert:true}、コールバック) '。 [the docs](http://mongodb.github.io/node-mongodb-native/api-generated/collection.html)を参照してください – numbers1311407