2017-08-14 187 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

相關問題