如何在pymongo中遍历游标对象时避免数据在内存中池化?

1 投票
2 回答
1136 浏览
提问于 2025-04-16 08:51

如何避免在内存中加载数据?当在 pymongo 中遍历游标对象时该怎么做?

举个例子:

def iter():
    c=pymongo.Connection()
    cursor=c.db.media.find().skip(0).limit(50000)
    for item in cursor:
        yield item

在进入 for 循环之前,会有大约 2 分钟的延迟。它在开始遍历之前会把所有数据都加载到内存中,这样做有什么原因吗?我能否以某种方式避免这种情况?

如果我在 mongodb 的命令行中执行,这一切都没问题。

2 个回答

0

看看光标的 block_size 方法。通过这个方法,你可以设置提前读取多少数据。我说“应该”,因为我现在遇到了一些问题(在修改 pymongo 中的 batch_size 时遇到 StopIteration 异常),但我可能是哪里搞错了。block_size 应该能解决你的问题。

0

你知道这样做是否可能吗?如果 c.db.media.find() 返回的是所有内容,而不是一个一个的结果,那我不太确定你还能做些什么。

撰写回答