MongoError:在node.js中使用批量查找和更新时,多次更新仅适用于$运算符

时间:2017-05-03 10:06:49

标签: javascript node.js mongodb bulkupdate

为什么会收到错误

  

MongoError:多次更新仅适用于$运算符

使用bulk find and update更新多个文档。

试过:

var bulk = db.collection('users').initializeUnorderedBulkOp();

var emails = ['a@gmail.com', 'b@gmail.com', 'c@gmail.com','d@gmail.com'];
var allStatus = ['s1', 's2', 's3', ''];

for (var i =0; i< allStatus.length; i++) {
  var query = { email: emails[i], status: { '$ne': allStatus[i] } };
  var updateField = {};
  if(allStatus[i]) {
      updateField = {
        $set: {status: allStatus[i], date: new Date()},
        $push: {
          notes: {note: 'jdf'+i, date: new Date()},
          history: {status: allStatus[i], date: new Date()}
        }
      };
  }
  bulk.find(query).update(updateField);
}

bulk.execute();

1 个答案:

答案 0 :(得分:2)

最后我得到了问题并解决了这个问题

错误

  

MongoError:多次更新仅适用于$运算符

updateFieldupdateField = {}之类的空对象时发生

。当我尝试使用空对象更新记录时,bulk更新时出现此错误。

所以在进入批量检查之前检查updateField 是否为空。如果不是对象

,请加入bulk操作

像:

if(Object.keys(updateField).length) {
   bulk.find(query).update(updateField);
}

通过这种方式我解决了我的问题