在mongoose的对象数组上使用循环保存模型。 所有插入时都需要回拨

我需要在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 } }) } 

只要插入是唯一的担心,这工作正常。 我需要有一个callback,当所有的logging插入时被触发。 我看了这个,但是看了第二个答案后还是不服气。 那么用适当的validation在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") } 

备注

  • 这看起来不漂亮,所以也许你应该考虑使用像async这样的控制stream库
  • node.js驱动程序也允许一次插入多个文档,这应该快很多,然后分别插入它们。
  • MongoDB附带mongoimport ,这是一种将CSV直接导入数据库的工具。