我有一个Node JS项目,Mongoose连接到MongoDB集合。
我希望用户能够上传此集合的csv导出,并使其内容成为MongoDB的内容。我使用mongoose-csv进行导出。
编辑:我使用fast-csv进行csv解析
这是一个片段:
//import a csv file into the database
app.post('/importdatabase', function (req, res) {
req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
csv.fromStream(file, { headers : true }).on("data", function (data) {
//Clear Database
License.remove({}, function (err) {
//Check for errors
if (err) {
res.send(err);
}
});
//Insert uploaded database
console.log(data);
License.collection.insert(data);
}).on("end", function () {
console.log("done");
//Send user back to main page
res.writeHead(301, {
'Location': '/',
'Content-Type': 'text/plain'
});
res.end();
});
});
req.pipe(req.busboy);
});
我正在测试4个文档的集合。当我使用License.collection.insert方法时,它只将最后一项保存到集合中。当我使用License.create方法时,它只保存最后3项。
当我记录传入的“数据”时,它会显示所有4个项目。我该怎么做才能进一步调试呢?
答案 0 :(得分:0)
我认为你需要将insert
放在remove
回调中:
csv.fromStream(file, {
headers: true
}).on("data", function(data) {
//Clear Database
License.remove({}, function(err) {
//Check for errors
if(err) {
res.send(err);
}
//Insert uploaded database
console.log(data);
License.collection.insert(data);
});
}).on("end", function() {
console.log("done");
//Send user back to main page
res.writeHead(301, {
'Location': '/',
'Content-Type': 'text/plain'
});
res.end();
});