在猫鼬中的对象数组上使用循环保存模型。全部插入后需要回调

beN*_*erd 1 javascript csv arrays mongodb node.js

我需要在 mongodb 中转储一个 csv。我为此使用了节点 csv 插件。我所做的是通过循环遍历行生成了一组 json 对象。在下一步中,我计划遍历这个数组并使用 mongoose 将文档插入集合中。我这样做:

for (var i = 0; i <= dataArray.length; i++) {
    var contact = new models.contact(dataArray[i]);
    contact.save(function (err) {
        console.log(i);
        if (err) {
            console.log(err);
        }
        else {
                //some logic goes here
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

只要插入是唯一的问题,这工作正常。我需要有一个回调,当所有记录都被插入时它会被触发。我看了这个,但看了第二个答案后并没有特别相信。那么,通过适当的验证在 mongodb 中转储 csv 的可接受方法是什么?

The*_*ppo 5

统计所有成功的写操作:

var done = 0;
for (var i = 0; i <= dataArray.length; i++) {
    var contact = new models.contact(dataArray[i]);
    contact.save(function (err) {
        console.log(i);
        if (err) {
            console.log(err);
        }
        else {
            //some logic goes here
            done++;
            if (done == dataArray.length) {
                finallyDone();
            }
        }
    })
}

finallyDone = function() {
    console.log("Everything is saved")
}
Run Code Online (Sandbox Code Playgroud)

注意事项

  • 这看起来不太漂亮,所以也许你应该考虑使用像async这样的控制流库
  • node.js 驱动程序还允许一次插入多个文档,这应该比单独插入要快得多。
  • MongoDB 附带mongoimport,这是一种将 CSV 直接导入数据库的工具。