Mongodb阵列$push和$pull

Mongodb阵列$push和$pull,mongodb,Mongodb,我希望从数组中提取一些值,同时尝试更新它 userSchema.statics.experience = function (id,xper,delet,callback) { var update = { $pull:{ 'profile.experience' : delet }, $push: { 'profile.experience': xper } }; this.f

我希望从数组中提取一些值,同时尝试更新它

    userSchema.statics.experience = function (id,xper,delet,callback) {
    var update = {
      $pull:{
        'profile.experience' : delet
      },

        $push: {
          'profile.experience': xper
        }
  };
  this.findByIdAndUpdate(id,update,{ 'new': true},function(err,doc) {
    if (err) {
      callback(err);
    } else if(doc){
      callback(null,doc);
    }
  });
};
我得到的错误如下:

MongoError:异常:无法同时更新'profile.experience'和'profile.experience'


我发现了这样的解释:

问题是MongoDB不允许在服务器上执行多个操作 同一更新调用中的相同属性。这意味着 操作必须在两个单独的原子操作中发生

您可以阅读以下帖子:


如果需要将一个数组值替换为另一个数组值,可以使用进行更新

(至少,见mongo 4.2.1)

这将用“新值”替换所有“旧值”数组元素

db.your_collection.update(
    { "_id": ObjectId("your_24_byte_length_id") },
    { "$set": { "profile.experience.$[elem]": "new_value" } },
    { "arrayFilters": [ { "elem": { "$eq": "old_value" } } ], "multi": true }
)