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

时间:2019-08-08 10:37:19

标签: python pymongo database-cursor

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

list(my_db.my_collection.find())  

将光标转换为列表对象,以便可以迭代每个元素。如果find()查询返回少量数据,则此方法效果很好。但是,当我扩展数据库以返回1000万个文档时,游标到列表的转换将花费很多时间。我没有将数据库结果(游标)转换为列表,而是尝试将游标转换为数据帧,如下所示:

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

这并没有给我任何性能上的改善。

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

3 个答案:

答案 0 :(得分:1)

直到现在我还没有使用过pymongo。
但是我可以肯定地说一件事,如果您要通过

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

然后您必须使用generator
因为在这里使用list会大大增加内存使用量,如果超出允许值,可能会引入MemoryError

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

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

答案 1 :(得分:0)

游标对象pymongo已经为您提供了延迟加载对象的功能,无需执行其他任何操作。

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

答案 2 :(得分:0)

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

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