如何在MongoDB中按同一键的两个值查询集合所有文档?
正确查询MongoDB中匹配值列表的文档并转换为DataFrame
你之前的两种写法都存在问题:
db.collection.find({'key_1': ['a', 'd']}):MongoDB会将数组视为精确匹配条件,只会返回key_1的值恰好是['a', 'd']的文档,显然不符合你的需求。db.collection.find({'key_1': 'a', 'key_1': 'd'}):Python字典不允许重复键,后写的'key_1': 'd'会覆盖前面的'key_1': 'a',实际只会查询key_1为d的文档。
正确实现方式
MongoDB提供了$in操作符,专门用于匹配字段值在指定列表中的文档,结合pymongo和pandas的完整代码如下:
from pymongo import MongoClient import pandas as pd # 连接MongoDB实例(根据你的实际配置修改) client = MongoClient('mongodb://localhost:27017/') # 指定数据库和集合 db = client['你的数据库名'] collection = db['你的集合名'] # 构建查询条件:匹配key_1值为'a'或'd'的文档 query = {'key_1': {'$in': ['a', 'd']}} # 执行查询获取游标 cursor = collection.find(query) # 将游标转换为DataFrame result_df = pd.DataFrame(list(cursor)) # 查看结果 print(result_df)
MongoDB Compass中的查询写法
在Compass的查询输入框中,直接输入以下JSON格式的条件即可:
{"key_1": {"$in": ["a", "d"]}}
这样就能得到你需要的_id为1、2、3的所有文档,再通过pandas转换为DataFrame即可完成需求。
内容的提问来源于stack exchange,提问作者kostya ivanov
相关产品推荐
相关产品推荐

