MongoDB 使用 findOneAndDelete 删除嵌套数组中满足多条件的指定对象
解决方案
你当前使用的findOneAndDelete是用于删除完整用户文档的方法,无法实现仅删除数组内指定嵌套角色对象的需求,且你现有的代码存在语法错误(findOneAndDelete后多了一对多余的空括号)。
你可以使用MongoDB提供的$pull数组操作符,配合findOneAndUpdate方法完成需求:
User.findOneAndUpdate( // 定位目标用户文档 { _id: "612d0ba09403d0224b55cb6d" }, // 从characters数组中删除id等于0的对象 { $pull: { characters: { id: 0 } } }, // 可选配置:返回更新后的最新文档用于结果验证 { new: true }, (err, updatedUser) => { if (err) console.error('删除角色出错: ', err) else console.log('更新后的用户数据', updatedUser) } )
操作说明
$pull是MongoDB内置的数组操作符,作用是从指定数组中移除所有符合筛选条件的元素,会自动遍历数组匹配你传入的对象规则- 如果你不需要获取更新后的文档,可以省略第三个参数的
new: true配置
内容的提问来源于stack exchange,提问作者Jakub Hampl
相关产品推荐
相关产品推荐

