在nodejs中插入批量数据的问题
Posted
技术标签:
【中文标题】在nodejs中插入批量数据的问题【英文标题】:Issue in inserting bulk data in nodejs 【发布时间】:2018-08-25 03:46:42 【问题描述】:这是我的对象,
'name': 'Lipika', 'monday': 1
'name': 'Ram', 'monday': 0
'name': 'Lipika', 'tuesday': 1
'name': 'Ram', 'tuesday': 0
这是两个条件
我想检查 Lipika 是否存在于数据库中,如果不存在,我应该在用户集合中创建他的名字,然后插入到出勤集合中,如果已经存在,那么我应该插入出勤集合。
这是我尝试过的
for (var key in row)
checkUser(name,function(data)
//Insert inside Attendence collection then..
);
function checkUser(name, callback)
dbModel.User.findOne( name: name, function (err, data)
if(data)
callback('exist');
else
var User = new dbModel.User(name : name);
User.save(function (err)
if (err)
console.log('Err',err);
else
callback('not exist');
);
);
但是当 nodejs 以异步方式运行时,它会创建 Lipika 和 Ram 两次。我怎样才能等到 javascript 检查并插入用户内部?
【问题讨论】:
你是通过lipika和ram两次吗? 是的,因为它在对象中有两次 【参考方案1】:试试这个代码可能对你有帮助!
function checkUser(name, callback)
dbModel.User.findOne( name: name).then((data)=>
if(data)
//callback('exist');
//user already present insert attendance
else
var User = new dbModel.User(name : name);
User.save().then((data)=>
//user not present insert collection
,(err)=
);
,(error)=>
console.log('something went wrong');
);
【讨论】:
【参考方案2】:您为什么不让名称字段唯一,而不是每次检查数据库,这将给出更准确的结果。因为如果多个请求同时出现,读取和写入会产生问题。
使用findAndModify避免2次操作读写。不好的方法:(
dbModel.User.findAndModify(
query:
name: name
,
update:
$setOnInsert:
name: name
,
new: true,
upsert: true
, (err, data) =>
callback('exist');
);
【讨论】:
以上是关于在nodejs中插入批量数据的问题的主要内容,如果未能解决你的问题,请参考以下文章
在mysql Sequelize + Nodejs中将数组和对象转换为批量插入
使用 mysql2 和 NodeJs 批量插入会抛出 500
Javascript(NodeJs) - 将数组和对象转换为 mysql 中的批量插入(Sequelize)