Javascript 将csv转换为json并删除重复项,同时使用nodejs将数据保存到mongodb
//products.csv |唯一代码|名称| |:---------- | --------:| |0001 |鼠标| |0002 |键盘| |0003 |监视器| |0001 |鼠标| //将csv转换为json并将数据保存到mongodb的代码Javascript 将csv转换为json并删除重复项,同时使用nodejs将数据保存到mongodb,javascript,node.js,json,mongodb,mongoose,Javascript,Node.js,Json,Mongodb,Mongoose,//products.csv |唯一代码|名称| |:---------- | --------:| |0001 |鼠标| |0002 |键盘| |0003 |监视器| |0001 |鼠标| //将csv转换为json并将数据保存到mongodb的代码 const csv=require(“csvtojson”); router.post(“/uploadProducts”),异步(请求、回复)=>{ const products=wait csv().fromFile(“./products
const csv=require(“csvtojson”);
router.post(“/uploadProducts”),异步(请求、回复)=>{
const products=wait csv().fromFile(“./products.csv”);
试一试{
products.map(异步(pdata)=>{
让uniqueCode=wait Product.findOne({
产品代码:pdata.productCode,
});
如果(!唯一代码){
//创建新对象
让产品=新产品({
产品代码:pdata.productCode,
产品名称:pdata.name,
});
等待产品。保存();
}
});
res.send(“成功”);
}捕捉(错误){
控制台错误(err);
}
})
有两个问题:
product.save()
也是异步的,但不是通过wait
等待的。这样,如果您在随后的两行中有一个id相同的产品,则在处理第二行并使用product.findOne
检查数据库时,很可能尚未插入前一行的产品,因此保护检查失败,您插入了另一项
映射提供了一个异步函数。每个异步函数都返回一个承诺。这样,您的映射可能在对MongoDB的任何调用到达数据库并将您的产品数组转换为运行异步的承诺数组之前就完成了。因此,您对数据库调用的执行顺序没有影响,也不能期望它们按顺序运行。这意味着,对于您的所有产品,在调用product.save()
之前,很可能已经调用了findOne
函数,因此,对于具有相同id的所有产品,如果它们在调用过程之前不在数据库中,则返回false。这还意味着在完成整个数据库操作之前,您需要很长时间才能向客户机发送success