db.collection.find()过多地返回完整数据

时间:2017-08-14 06:15:19

标签: python mongodb pymongo nosql

我正在执行以下操作从MongoDB集合中提取完整数据。

db_client = MongoClient(host='host')
db_database = db_client['db_name']
raw_data = db_database.collection_name.find()
result_data = [row for row in raw_data]
return result_data

返回需要太多时间。从集合中获取完整数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

如果你有很多文件,这一行:

result_data = [row for row in raw_data]

是Python花费大部分时间的地方。

根据您要对文档执行的操作,您可以执行以下操作:

for row in raw_data:
    # process each row
    print row

但是,如果您打算返回整个集合而不处理它,那么您正在进行集合扫描(相当于SQL中的表扫描)并创建一个大型Python数据结构。根据定义,任何一个过程都不​​会很快。结合起来,它们将变得非常缓慢,并且没有我知道的解决方法。

如果您的意图是转储整个集合,您可能需要查看mongodumpmongoexport,而不是设计用于执行此任务。

答案 1 :(得分:1)

通过将光标转换为刚刚接下来的列表,完全跳过列表理解步骤(这可能是滞后的原因):

raw_data = list(db_database.collection_name.find())