在nodejs中插入批量数据的问题

时间:2018-03-16 06:37:07

标签: javascript node.js asynchronous mongoose callback

这是我的对象,

{'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检查并插入用户?

2 个答案:

答案 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');
});