如何利用PyMongo的find获取多组查询条件的存在性布尔列表?
解决方案
可以实现这个需求,但无法直接通过find方法生成对应长度的布尔列表,需要结合查询结果做后续处理,具体步骤如下:
- 第一步:通过
find查询出所有匹配的(ID, Name)组合,将结果转换为集合以提升查找效率 - 第二步:遍历原查询列表,逐个判断每组条件是否存在于匹配集合中,生成布尔列表
示例代码如下:
from pymongo import MongoClient # 建立连接 db_client = MongoClient("Conn string") db = db_client[some_db_name] collection = db[some_collection_name] id_name_queries = [(123,'George'),(234,'Jon'),(521,'Tfu')] # 查询所有匹配的条目,仅提取需要的ID和Name字段 matched_pairs = set() for doc in collection.find( {"$or": [{"$and": [{"ID": pair[0]}, {"Name": pair[1]}]} for pair in id_name_queries]}, {"ID": 1, "Name": 1, "_id": 0} ): matched_pairs.add((doc["ID"], doc["Name"])) # 生成对应布尔列表 ind = [(pair in matched_pairs) for pair in id_name_queries] print(ind) # 输出示例:[True, False, True]
补充说明
- 用集合存储匹配结果是因为集合的成员判断操作时间复杂度为O(1),比列表的O(n)更高效,查询数量较多时优势更明显
- 若MongoDB版本在3.2及以上,也可使用聚合管道实现类似逻辑,但对于简单的存在性判断,上述方法更直观易维护
内容的提问来源于stack exchange,提问作者Benny K
相关产品推荐
相关产品推荐

