Python操作MongoDB查询报unhashable type: 'dict'错误,求正确写法
错误原因排查
- 过滤条件构造不符合MongoDB语法要求:PyMongo的
collection.find()方法第一个入参要求是单个查询条件字典,你定义的query实际是由3个独立字典组成的元组,没有合并多条件到同一个字典中。
- 过滤条件构造不符合MongoDB语法要求:PyMongo的
- 传参语法错误:调用
find()时你给query外层额外套了{},相当于尝试将包含字典的元组作为字典的键使用,而字典属于不可哈希类型,直接触发TypeError: unhashable type: 'dict'报错。
- 传参语法错误:调用
修正后代码
import pandas as pd from datetime import datetime # 示例时间,可根据你的实际需求修改my_datetime的值 my_datetime = datetime(2023, 1, 1) # 多条件合并到同一个查询字典,默认是逻辑与关系 query = { "colourCode": "orange", "createdOn": {"$gt": my_datetime}, "assignmentRef": {"$ne": None} } # find方法直接传查询条件字典和投影字典,不需要额外外层大括号 cursor = collection.find( query, { 'createdOn': 1, 'assignmentRef.name': 1, '_id': 0, 'colourCode': 1 } ) list_cur = list(cursor) df = pd.DataFrame(list_cur) print(df)
补充说明
- 如果你需要用逻辑或、逻辑非等复杂组合条件,才需要显式加
$or/$and等操作符包裹条件,普通多条件同时满足的查询直接把所有条件写到同一个字典即可。 find()方法的两个入参分别是过滤条件、返回字段控制,都为字典类型,不需要额外嵌套外层大括号。
内容的提问来源于stack exchange,提问作者usmansharif shaik
相关产品推荐
相关产品推荐

