我希望从数组中提取一些值并同时尝试更新它。
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: exception: Cannot update 'profile.experience' and 'profile.experience' at the same time
答案 0 :(得分:8)
我找到了这个解释:
问题是MongoDB不允许对其进行多项操作 同一更新调用中的相同属性。这意味着两者 操作必须在两个单独的原子操作中进行。
你可以阅读那些帖子:
答案 1 :(得分:2)
如果需要将一个数组值替换为另一个,可以使用 arrayFilters 进行更新。
(至少在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 }
)
这会将所有“旧值”数组元素替换为“新值”。