python中使用collection.find()在mongodb中查詢大量資料時的問題
阿新 • • 發佈:2018-12-24
問題描述:
假設collection中有2000條資料,執行如下程式碼:
i=1
for content in collection.find():
print i++
列印到101時,列印停止,等待若干秒後繼續列印完全。
分析:
mongodb的find()方法返回遊標cursor,這裡有一個限制,預設包含101個文件。官方文件。
解決方案:
1.設定batch size:
i=1
for content in collection.find().batch_size(500):
print i++
不建議設太大,設定太大的話,會在列印之前話費大量時間讀取cursor。所以建議設定適量的值,讀取一些cursor,列印一些資料。
2.將cursor轉化為list:
result = collection.find()
result_list = list(result[:])
i=1
for document in result_list
print i++
python不像php有toArray()方法將結果集轉化為陣列一次性讀取,可以轉化成列表 , 將資料放在RAM中,但是轉化的過程一樣要耗時。