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 }
)