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

使用PyMongo提取MongoDB嵌套name字段报错,如何调整循环获取内部元素

问题原因

报错通常由两类异常数据导致:

  • 部分文档的name字段不存在,或不是字典(对象)类型,直接调用.keys()方法会触发属性错误
  • 部分name下的子项不存在value或source字段,直接按键取值会抛出键错误

修复方案

在循环中补充字段存在性、类型校验逻辑即可,修改后代码参考:

for i in col_keys.find({"updatedAt": {"$gte": startDate, "$lt": endDate}}):
    Id = i["_id"]
    priority = i["priority"]
    createdAt = i["createdAt"]
    updatedAt = i["updatedAt"]
    # 先校验name字段存在且为字典类型
    if "name" in i and isinstance(i["name"], dict):
        nameElement = i["name"]
        for j in nameElement.keys():
            sub_item = nameElement[j]
            # 再校验子项为字典,且包含需要提取的value、source字段
            if isinstance(sub_item, dict) and "value" in sub_item and "source" in sub_item:
                value = sub_item["value"]
                source = sub_item["source"]
                # 此处补充你自己的字段存储、处理逻辑

可选优化

如果你的MongoDB版本支持聚合查询,也可以在查询阶段就过滤掉不符合格式要求的文档,减少代码层面的判断开销:

# 聚合查询提前过滤name为对象类型的文档
query_pipeline = [
    {"$match": {
        "updatedAt": {"$gte": startDate, "$lt": endDate},
        "name": {"$type": "object"}
    }}
]
for i in col_keys.aggregate(query_pipeline):
    # 后续处理逻辑和上述一致

内容的提问来源于stack exchange,提问作者superunknown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:15:06