如何在MongoDB中按条件删除数组元素?问题求助
解决MongoDB数组元素删除问题
我来帮你搞定这个数组元素删除的问题~先拆解下你遇到的问题,再给出正确的操作方案:
你的命令存在两个关键问题
- 目标日期写错了:你想要删除的是
dateOfReg为"09-05-2021"的元素,但执行的命令里写的是"10-05-2021",这直接导致命令找不到要删除的目标; - 无需使用
$elemMatch:当只需要匹配子文档的单个字段时,$pull可以直接通过字段条件匹配,不需要嵌套$elemMatch($elemMatch多用于多条件同时匹配的场景)。
正确的批量更新命令
下面这个命令可以帮你批量删除所有文档中mailID数组里dateOfReg为"09-05-2021"的元素:
vaccinenotifier.update( {}, { $pull: { mailID: { dateOfReg: "09-05-2021" } } }, { multi: true } )
命令细节说明
- 第一个参数
{}:匹配集合中的所有文档; - 第二个参数
{ $pull: { mailID: { dateOfReg: "09-05-2021" } } }:$pull操作符会从mailID数组中移除所有符合dateOfReg: "09-05-2021"条件的子文档; - 第三个参数
{ multi: true }:确保更新操作应用到所有匹配的文档,而不是只更新第一个匹配的文档。
执行后的预期效果
执行完命令后,你的集合数据会更新为:
[ { _id: 6097ba8b64d60c653b810c28, pincode: 711104, mailID: [ { mail: "email1@gmail.com", dateOfReg: "10-05-2021" } ] }, { _id: 6097bb7c64d60c653b810c29, pincode: 841231, mailID: [ { mail: "email4@gmail.com", dateOfReg: "08-05-2021" } ] }, { _id: 6097bbaa64d60c653b810c2a, pincode: 711105, mailID: [ { mail: "email6@gmail.com", dateOfReg: "07-05-2021" } ] } ]
所有dateOfReg为"09-05-2021"的数组元素都已被成功移除。
内容的提问来源于stack exchange,提问作者harsh vardhan
相关产品推荐
相关产品推荐

