Mongoose中使用$pull无法删除数组内嵌文档的问题咨询
问题根因
$pull操作的规则是直接对目标数组的每一个元素执行条件匹配,无需嵌套$elemMatch即可匹配内嵌字段,你写的$elemMatch会导致匹配逻辑偏差,操作无法命中需要删除的元素。updateMany方法默认更新所有匹配文档,额外传入的{ multi: true }属于无效冗余参数,不会影响执行结果但无意义。
正确实现
单条件(仅匹配value为0)删除的代码如下:
await QuantumResourcesManpowerAdmin.updateMany( { resourceId: qrmaRecord.resourceId }, { $pull: { dateAndValue: { value: 0 } } } );
如果你需要同时对数组内嵌对象的多个字段做匹配(比如同时要求value为0、date早于指定日期),才需要使用$elemMatch,示例如下:
// 多条件匹配删除示例 await QuantumResourcesManpowerAdmin.updateMany( { resourceId: qrmaRecord.resourceId }, { $pull: { dateAndValue: { $elemMatch: { value: 0, date: { $lt: new Date('2024-01-01') } } } } } );
内容的提问来源于stack exchange,提问作者Tharinda Hashen
相关产品推荐
相关产品推荐

