如何使用PyMongo按两个条件执行delete_many删除操作?
解决PyMongo delete_many多条件删除无效的问题
核心错误点
你的代码存在两个关键问题:
- 参数传递错误:PyMongo的
delete_many()方法第一个参数是完整的查询条件,第二个参数是可选的配置项(如collation、hint等),不能将第二个查询条件单独作为第二个参数传入。这和mongosh的使用习惯不同,导致第一个写法完全不生效。 - $exists参数类型错误:
{"$exists": "false"}中使用了字符串"false",但MongoDB的$exists操作符要求传入布尔值(Python中为False)。字符串"false"会被当作字段值匹配,而非判断字段是否存在,因此无法找到目标记录。
正确代码示例
方式一:默认逻辑与(推荐)
MongoDB对同一文档中的多个条件默认是逻辑与关系,无需显式使用$and:
db.hashes.delete_many( {"highlights": {"$exists": False}, "last_pulled": {"$lte": purgeDate}} )
方式二:显式$and(适用于字段冲突场景)
如果需要明确强调逻辑与(比如同一字段有多个条件),修正参数类型后的写法也可生效:
db.hashes.delete_many( {"$and": [{"highlights": {"$exists": False}}, {"last_pulled": {"$lte": purgeDate}}]} )
验证说明
单独使用last_pulled条件能正常删除,说明日期逻辑是正确的,修正highlights的查询条件后,两个条件即可共同生效,筛选出同时满足「highlights字段不存在」和「last_pulled早于清理日期」的文档并删除。
内容的提问来源于stack exchange,提问作者x0xchoc0late
相关产品推荐
相关产品推荐

