这是我的对象,
{'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检查并插入用户?
答案 0 :(得分:0)
试试这段代码可能对你有所帮助!
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');
});
}
答案 1 :(得分:0)
而不是每次检查数据库,为什么不使名称字段唯一,这将提供更准确的结果。因为如果同时有多个请求,读写会产生问题。
使用findAndModify避免2次操作读写。不好的方法:(
dbModel.User.findAndModify({
query: {
name: name
},
update: {
$setOnInsert: {
name: name
}
},
new: true,
upsert: true
}, (err, data) => {
callback('exist');
});