Pymongo - 循环遍历具有大数据的游标的有效方法

Pymongo - Efficient way to loop through cursor having large data

在 Pymongo 中循环遍历游标对象的最有效方法是什么? 目前,这就是我正在做的事情:

list(my_db.my_collection.find())  

它将光标转换为列表对象,以便我可以遍历每个元素。如果 find() 查询 return 的数据量很小,这就可以正常工作。但是,当我将数据库扩展到 return 1000 万个文档时,游标到列表的转换将永远进行下去。我没有将数据库结果(游标)转换为列表,而是尝试将游标转换为数据框,如下所示:

pd.Dataframe(my_db.my_collection.find())  

这并没有给我带来任何性能提升。

在 python 中遍历游标对象的最有效方法是什么?

到目前为止我还没有使用过 pymongo。
但是有一件事我可以肯定地说,如果你通过

获取大量数据
list(my_db.my_collection.find()) 

那么你必须使用 generator.
因为,这里使用 list 会显着增加内存使用量,如果超出允许值,可能会引入 MemoryError

def get_data():
    yield(my_db.my_collection.find())

尝试使用不会占用太多内存的方法。

pymongo 给你的游标对象已经是延迟加载对象了,不需要做任何其他事情。

for doc in my_db.my_collection.find():
    #process doc

您可以迭代的方法find() returns a Cursor

for match in my_db.my_collection.find():
    # do something
    pass