MongoDB ネイティブ JS ドライバーと、固有の制約が与えられた挿入について少し混乱しています。ここhttp://mongodb.github.com/node-mongodb-native/api-articles/nodekoarticle1.htmlを読むと、挿入後、保存されたドキュメントを処理できる「成功」コールバックを渡すことができるようです (おそらくたとえば、保存されたドキュメントから _id フィールドを取得します)。
しかし、それぞれに電子メール フィールドがあるユーザー プロファイルを保存するとします。電子メール フィールドを一意にしたいので、ensureIndex を使用する必要があると考えています。次に、それぞれに電子メール フィールドがある 10 個のユーザー プロファイルをバッチ挿入したいとしますが、それらの 10 個の電子メールのうち 2 個は既にデータベースに存在します。一意の制約により、これら 2 つのユーザー プロファイルはデータベースに追加されませんよね? では、コールバックには何が返されるのでしょうか? 8つの保存されたドキュメント? または 8 つの保存されたドキュメントと 2 つの既存のドキュメント?
編集:少しテストした後、私はいくつかの良い進歩を遂げましたが、まだ1つ欠けています. 上記の例を続けて説明します。1 つのドキュメントを含むユーザー プロファイルのコレクションがあり、そのドキュメントに "email": "ex@mple.com" のフィールドがあるとします。次に、このコレクションの email フィールドに { unique: true } のインデックスを付けたとします。次に、単純な挿入を実行すると:
collection.insert({ 'email': 'ex@mple.com' }, { safe: true }, function (err, results) {
console.log(results);
});
上記のコールバックは未定義で返されます。これは、その電子メールを含むドキュメントが既に存在し、挿入が実行されなかったためです。それは十分に理にかなっていますが、私が望むのは、新しい挿入を妨げた既存のドキュメントを含む「結果」が返されることです。それは可能ですか?