Python操作MongoDB如何通过复合主键字典列表过滤查询匹配数据
MongoDB复合主键批量查询优化方案
你原本的实现逻辑是可行的,但存在冗余部分,我们可以根据实际场景做更简洁高效的优化:
通用场景(lista_pks中cod值不固定)
MongoDB默认将同一查询对象内的多个字段条件视为逻辑与关系,因此你额外嵌套的$and完全可以省略,只需要一行代码即可生成查询条件:
query = {"$or": lista_pks}
生成的查询结构如下,比你原本的写法更简洁,查询解析效率也更高:
{'$or': [ {'pers_id': '00002', 'cod': '01'}, {'pers_id': '00003', 'cod': '01'}, ... ]}
特殊优化场景(lista_pks中cod值全部相同)
如果像你的示例一样,所有元素的cod字段都是同一个固定值,可以进一步优化为固定cod + $in匹配pers_id的写法,性能更高:
# 提取所有主键中的pers_id列表 pers_ids = [item["pers_id"] for item in lista_pks] # 构造查询条件 query = {"cod": "01", "pers_id": {"$in": pers_ids}}
这种写法的优势:
- 条件结构更简单,MongoDB查询优化器处理成本更低
- 可以完美命中
cod + pers_id的联合索引,当批量查询的主键数量较多时,性能远优于多条件$or的写法
内容的提问来源于stack exchange,提问作者Lanre
相关产品推荐
相关产品推荐

