1

为什么会报错

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();
4

1 回答 1

2

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

错误

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

发生在updateFieldupdateField = {}. 当我尝试使用空对象更新记录时,收到此错误以进行bulk更新。

所以在双关语成批之前检查是否updateFieldbulk如果不是对象,则放入操作

喜欢:

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

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

于 2017-05-04T07:57:12.140 回答