Mongoose嵌套数组使用$pull原子操作失效,求正确实现方案
失效原因
你的$pull语法使用错误:$pull操作符的作用对象是需要删除元素的数组本身,而非数组内的单个元素。你当前代码中items.$.notes.$[note]已经定位到了notes数组内的单个字符串元素,$pull无法对非数组类型的字段执行操作,因此请求无效果。
$set操作配合数组过滤器是为了修改数组内指定位置的元素,但$pull本身就支持直接匹配要删除的元素值,不需要额外使用arrayFilters定位元素。
正确实现代码
List.findOneAndUpdate( { "user": req.user.id, "name": list, "items._id": ObjectId(id) }, // 直接对notes数组执行$pull,匹配要删除的note值即可 { "$pull": { "items.$.notes": note } }, { new: true }, (err, newList) => {} )
额外提示
检查你的Schema定义拼写:你定义的Item Schema变量名为itemsSchema,但在listSchema的items字段默认值里写的是[itemSchema],变量名不匹配的问题也可能导致非预期的行为。
内容的提问来源于stack exchange,提问作者user15561997
相关产品推荐
相关产品推荐

