在Pymongo中循环游标对象的最有效方法是什么? 目前,这就是我正在做的:
list(my_db.my_collection.find())
将光标转换为列表对象,以便可以迭代每个元素。如果find()查询返回少量数据,则此方法效果很好。但是,当我扩展数据库以返回1000万个文档时,游标到列表的转换将花费很多时间。我没有将数据库结果(游标)转换为列表,而是尝试将游标转换为数据帧,如下所示:
pd.Dataframe(my_db.my_collection.find())
这并没有给我任何性能上的改善。
在python中遍历游标对象的最有效方法是什么?
答案 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