繁体   English   中英

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

[英]Pymongo - Efficient way to loop through cursor having large data

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

list(my_db.my_collection.find())  

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

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

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

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

到目前为止,我还没有使用过pymongo。
但是我绝对可以说,如果您通过执行以下操作来获取大量数据,

list(my_db.my_collection.find()) 

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

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

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

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

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

find()方法返回一个游标 ,您可以对其进行迭代

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM