如何避免在内存中汇集数据。在pymongo中迭代游标对象?

时间:2010-12-21 17:42:49

标签: python mongodb pymongo

如何避免在内存中汇集数据。在pymongo中迭代游标对象?

示例:

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

在进入周期for之前,暂停约2减。由于某种原因,它会在开始迭代之前将所有数据加载到内存中。我可以以某种方式避免它吗?

如果我在mongodb shell中这样做,一切都还可以。

2 个答案:

答案 0 :(得分:0)

你知道这是否可能吗?如果c.db.media.find()返回所有内容而不是迭代器,我不确定你能做多少。

答案 1 :(得分:0)

查看cursor的block_size方法。有了它,你应该能够预先设定你读了多少。我说应该,因为我现在面临一些问题(Getting StopIteration exception on next(cursor) when modifying batch_size in pymongo),但我可能犯了一些错误。 block_size应该可以解决你的问题。