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



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

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
        }
    })
}

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

计算所有成功的写入操作:

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")
}

注释

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

最新更新