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

Pymongo嵌套遍历两个cursor对象时内层循环仅执行一次问题

问题根因

  • Pymongo查询返回的Cursor是单次遍历迭代器,首次遍历完成后游标指针会停在数据集末尾,后续再次遍历该游标不会返回任何数据。你的代码在第一次外层循环处理第一个user时,已经完整遍历了locations游标,剩下的外层循环再执行内层遍历时,locations游标已经处于耗尽状态,自然没有输出。

修复方案

方案1:预加载locations到内存(适用于locations数据量较小的场景)

将locations游标一次性转为列表存储到内存,后续每次遍历都使用该列表,仅需一次数据库查询:

user_count = 0
location_count = 0
# 提前将locations游标转为列表
locations = list(locations)
for user in users:
    print(user)
    user_count += 1
    for location in locations:
        print(location)
        location_count += 1

print(user_count, location_count)

如果locations数据集过大,全量加载可能导致内存溢出,可选择方案2。

方案2:每次内层循环重新查询locations(适用于locations数据量较大的场景)

每次需要遍历locations时都重新发起查询获取新的游标,避免一次性加载全量数据:

user_count = 0
location_count = 0
for user in users:
    print(user)
    user_count += 1
    # 每次执行内层循环前重新查询获取新的locations游标,需替换为你实际的查询条件
    locations = db.your_location_collection.find(你的查询条件)
    for location in locations:
        print(location)
        location_count += 1

print(user_count, location_count)

该方案的缺点是会发起多次数据库查询,数据库压力高于方案1,请根据实际业务场景选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:03