2017-08-14 184 views
1

我正在做下面的事情来从MongoDB集合中获取完整的数据。db.collection.find()花费太多的时间来返回完整的数据

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 

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

+0

使用游标操作,而不是阵列... – tibetty

+0

你的意思是cursor.toArray()?它不工作。 – ShubhamHAgrawal

+0

否,通过调用cursor.next()直到结果结束,逐个访问返回的文档。 – tibetty

回答

1

如果你有很多的文件,这条线:

result_data = [row for row in raw_data] 

是Python的地方花费大量的时间。

取决于你想要的文件做什么,你可以做:

for row in raw_data: 
    # process each row 
    print row 

但是,如果你打算返回整个集合,而不是处理它,你正在做一个集合扫描(相当于SQL中的表扫描)并创建大型Python数据结构。根据定义,任何进程都不会很快。综合起来,它们会很慢,而且我没有解决方法。

如果您的目的是转储整个集合,你可能想在mongodumpmongoexport看起来相反,其目的是为了执行此任务。

+0

我想将数据从MongoDB移动到MySQL数据库。问题是平均每分钟有一个MongoDB中有一个新条目。 – ShubhamHAgrawal

1

完全跳过列表理解步骤(这可能是滞后的原因)光标转换到一个列表马上蝙蝠:

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

它返回[object]。 – ShubhamHAgrawal

相关问题