簡體   English   中英

使用nodejs mongodb驅動程序和async.js在mongodb中插入多個記錄

[英]Insert multiple records in mongodb with nodejs mongodb driver and async.js

目前,我試圖通過nodejs驅動程序在mongodb中執行許多條目時遇到回調地獄。 只有插入了所有記錄(在數組中),才應執行某些任務。 我簽出了async.each方法,但是主要的問題是,如果遇到錯誤,它將調用回調。 因此,集合中的其余項目將不被處理。

那么,使用async.js處理此類問題的正確方法是什么?

PS:請舉一個示例,這對我非常有用,因為我只是從async.js開始,並且很少(如果有的話)示例可用於使用api將其批量插入mongodb。

讓我們描述問題。

  1. 您具有一些庫的基於迭代的流程(示例:AsyncJS)
  2. 異步流可能會在某些迭代中中斷
  3. 您想確保MongoDB中的所有操作均已正確存儲,或者將來決定是否執行該操作

在這種情況下,我可以建議您使用批量操作

 // 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可以有序和無序。 無序執行性能更好,即使發生某些錯誤也可以繼續工作2)有序執行是順序執行的,即使發生某些錯誤,MongoD也不會繼續執行到Bulk中的下一個元素。

文檔: http : //mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#initializeOrderedBulkOp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM