バルク挿入を実行して重複キーエラーが発生した場合はどうすればよいですか?mongodbバルク挿入重複キーエラーを避ける
id
フィールド(ではなく、_id
)に一意のインデックスを持つコレクションがあり、その中にいくつかのデータがあります。それから私はより多くのデータを取得し、コレクションに存在しないドキュメントだけを追加したい。
私は次のコードを持っている:
let opts = {
continueOnError: true, // Neither
ContinueOnError: true, // of
keepGoing: true, // this
KeepGoing: true, // works
};
let bulk = collection.initializeUnorderedBulkOp(opts);
bulk.insert(d1);
bulk.insert(d2);
bulk.insert(d3);
...
bulk.insert(dN);
let result = yield bulk.execute(opts); // this keep throwing duplicate key error
を、私はちょうどエラーを無視し、すべてのキューに入れられた操作で一括仕上げをさせたい。
私は、Bulkためnpm module apiにし、MongoDBのAPIの検索initializeUnorderedBulkOpと運とBulk writeためのドキュメント。エラーが書き込み操作の一つの処理中に発生した場合
エラー処理、MongoDBのプロセスに
続ける:順序なしの操作のためのドキュメント彼らsayでも
残りの書き込み操作はリストに残ります。
WICHが(少なくとも私の場合には)真実ではありません:(
すべてのアイデアは大歓迎です!
:ここ
は、ドキュメントへのリンクです応答の「エラーのリスト」。これについて最初に不平を言う人ではありません。一般的なアドバイスでは、エラーを「無視」し、結果オブジェクトを自分で検査します。結果は**常に**バッチの最後までとにかく続きます。だからあなたは実際には**実際には**すべての操作をリストに書いていたのですが、エラーが発生しました。 –
明示していただきありがとうございますが、私の問題は約束を使って 'execute'メソッドが例外を発生させ、約束がエラーだけで拒否されるということです。 'BulkWriteResult'オブジェクトを失います。 – Volox
はい。これはまさに私の反応です。以前のドライバーはこの場合例外を発生させませんでした。しかし、これは "UnOrdered"オペレーションがどのように処理されるかに影響しません。バッチは全体として "まだ"実行されていますが、レスポンスオブジェクトに "エラー"を返すのではなく、実行時に少なくとも1つのエラーが発生したときに結果がスローされ、エラーになります。今理解していますか? –