如何使用.forEach()插入多个集合并检查它是否存在

我想插入多个用户的详细信息.forEach()到我的Mongodb数据库。 在插入logging之前,我想检查用户logging是否存在。 如果用户不存在,则插入新的用户logging,否则更新现有的用户logging。

下边是

 var dataArray=[ {"id":"1","name":"abc","email":"abc@gmail.com"}, {"id":"2","name":"xyz","email":"xyz@gmail.com"}, {"id":"1","name":"abc","email":"abc@gmail.com"}, ]; dataArray.forEach(function(dataVar){ //check record exist or not User.findOne({id:dataVar.id},function(err,user){ if(!user){// Insert If user not exist var userSchema=new User({ id:dataVar.id, name:dataVar.name, email:dataVar.email }); userSchema.save(function(err,result){ console.log('New Record Inserted'); }) }else{ // Update records if user exist User.update({id:dateVar.id},{email:dataVar.email},function(err,result){ console.log('Record Updated');; }); } }) }); 

当运行这个代码片段时,它只检查数组中的第一个对象并插入到我的数据库中。 但下一次当第三个对象执行时,它不会像新logging那样检查和插入。

我没有得到什么事情。

请让我知道如何解决它。

谢谢。

你应该做你的循环asynchronous

请参阅: https : //caolan.github.io/async/docs.html#eachOfSeries

示例代码

 var dataArray = [{ "id": "1", "name": "abc", "email": "abc@gmail.com" }, { "id": "2", "name": "xyz", "email": "xyz@gmail.com" }, { "id": "1", "name": "abc", "email": "abc@gmail.com" }, ]; async.eachOfSeries(dataArray, function(dataVar, key, callback) { User.findOne({ id: dataVar.id }, function(err, user) { if (!user) { // Insert If user not exist var userSchema = new User({ id: dataVar.id, name: dataVar.name, email: dataVar.email }); userSchema.save(function(err, result) { console.log('New Record Inserted'); callback(); }) } else { // Update records if user exist User.update({ id: dateVar.id }, { email: dataVar.email }, function(err, result) { console.log('Record Updated');; callback(); }); } }) }, function(err) { if (err) console.error(err.message); // configs is now a map of JSON data console.log("All done") });