問題を説明しましょう。
- あなたは、いくつかのライブラリ(例:AsyncJS)
- 非同期フローはあなたが確認したいいくつかの反復
- で中断することが可能と反復ベースのフローを持っているすべてのMongoDBでoperatiosnが正しく に保存されていますか、たぶん私はあなたが一括操作を使用することをお勧めすることができ、この場合には、その操作が起こるべきか、将来の意思決定、あるいは全く
を取る
// array of operations
let batch = yourCollection.initializeUnorderedBulkOp();
async.each (yourArrayToIterate, function (item, next) {
// add some Operation that will be execute lated
batch.insert({firstName:"Daniele"});
batch.find({firstName: "Daniele"}).updateOne({$set: {lastName:"Tassone"}});
// other code to do...some Old Library
try {
someOldLibrary.doSomethingThatCanCreateAnExpection();
} catch (e) {
//some error happen
}
// more modern approach with New Library
someNewLibrary
.then(function (result){
})
.catch(function (err) {
// some error happen
}
}, function (err, result) {
// Flow is now completed, take a decision
if (err) {
// do nothing, maybe?
} else {
// execute all the Ordered Bulk
batch.execute().then(function(executionResult) {
// done, you can
});
}
});
注: 1)BulkOperationは、OrderedおよびUnOrderedにすることができます。 UnOrderedは何らかのエラーが発生してもパフォーマンスが向上し、作業を続ける 2)秩序が順番に実行され、何らかのエラーが発生した場合、MongoDはバルクの次の要素に進むことはありません。
ドキュメント: http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#initializeOrderedBulkOp
非同期はひどい/時代遅れのアプローチです。代わりに約束を使うべきです。同じタイプの複数のレコードを挿入する最も良い方法は、単一の複数行の挿入を使用することです。 PostgreSQLの例は次のとおりです。https://stackoverflow.com/questions/37300997/multi-row-insert-with-pg-promiseあなたはmongodbのために同じものを見つける必要があります。 –
@ vitaly-t私はそれは単なる意見だと思う。コールバック地獄のためのグーグルは非常に一般的な解決策asyncjsをもたらす。現在、私はasync.jsに行くことを好むでしょう – rahulserver
@rahulserverので、10の挿入がある場合、繰り返し#6で何が起こるはずですか?前の要素(#1〜#5)を削除しますか?次の(#7〜#10)に進みますか?またはここで停止するだけで(#6〜#10は挿入されません)、最後の関数()でコードを実行しないでください。 –