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

Python操作MongoDB查询报unhashable type: 'dict'错误,求正确写法

错误原因排查
    1. 过滤条件构造不符合MongoDB语法要求:PyMongo的collection.find()方法第一个入参要求是单个查询条件字典,你定义的query实际是由3个独立字典组成的元组,没有合并多条件到同一个字典中。
    1. 传参语法错误:调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:03