我需要在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直接导入数据库的工具。