You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:45:10