MongoError: multi update only works with $ operators while using bulk find and update in node.js

MongoError: multi update only works with $ operators while using bulk find and update in node.js

为什么会报错

MongoError: multi update only works with $ operators

同时使用 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();

最后我明白了问题所在并解决了那个问题

错误

MongoError: multi update only works with $ operators

updateField 是像 updateField = {} 这样的空对象时发生。当我尝试使用 空对象 更新记录时,出现 bulk 更新的错误。

所以在双关语进入批量之前检查 updateField 是否为 empty。放入bulk操作if not empty object

喜欢:

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

这样我的问题就解决了