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

如何用Python遍历MongoDB中的嵌套对象列表?附代码示例

遍历MongoDB返回的嵌套对象列表

看起来你已经成功从MongoDB获取到包含嵌套links数组的文档了,接下来遍历这个嵌套列表其实很简单,我来帮你梳理两种实现方式:

方式一:基于你现有的fetch_links方法处理返回结果

你的fetch_links方法返回的是一个文档列表(哪怕只匹配到一条数据,也会被包裹在列表里),而每个文档中的links字段才是我们需要遍历的嵌套对象列表。你可以这样处理:

old_links = Signatures.fetch_links(web_id)

# 遍历外层的文档列表(find返回的游标转成列表后是多个文档的集合)
for document in old_links:
    # 提取当前文档中的links列表,用get方法避免字段不存在时抛出KeyError
    links_collection = document.get('links', [])
    # 遍历每个嵌套的link对象
    for link_item in links_collection:
        # 访问每个link的属性,比如type、link_id、link
        print(f"Link类型: {link_item['type']}")
        print(f"Link ID: {link_item['link_id']}")
        print(f"Link地址: {link_item['link']}")
        # 这里可以添加你的业务处理逻辑,比如存储、校验等

方式二:优化fetch_links方法,简化后续遍历

因为你是通过_id查询文档(MongoDB中_id是唯一的),所以查询结果最多只有一条文档。可以用find_one替代find,直接返回单个文档,这样我们可以在方法内部直接提取links列表,让调用方的代码更简洁:

优化后的类方法

@classmethod
def fetch_links(cls, web_id):
    # 使用find_one直接获取匹配的单个文档,无需转换为列表
    target_doc = cls.db.websites.find_one({"_id": ObjectId(web_id)}, {"links": 1})
    # 如果文档存在,返回links列表;否则返回空列表避免后续报错
    return target_doc.get('links', []) if target_doc else []

调用并遍历的代码

old_links = Signatures.fetch_links(web_id)
# 现在old_links直接就是links对象的列表,直接遍历即可
for link_item in old_links:
    print(f"Type: {link_item['type']}, Link ID: {link_item['link_id']}, URL: {link_item['link']}")

两种方式都能实现你的需求,第二种方式更贴合_id查询的唯一性场景,代码也更简洁。根据你的实际业务场景选择就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:19