我有很多數據從mongodb數據庫中獲取。我無法一次加載服務器上的所有數據,因爲它太大而且內存不足。MongoDb:是否每個好記憶都是明智的?
如果我使用forEach,它會獲取所有內容並加載服務器上的所有內容,然後在它們中的每一個上應用該函數?
OR
將它取的第一個元素,應用功能,加載第二個元素,應用功能......直到最後一個人?
我有很多數據從mongodb數據庫中獲取。我無法一次加載服務器上的所有數據,因爲它太大而且內存不足。MongoDb:是否每個好記憶都是明智的?
如果我使用forEach,它會獲取所有內容並加載服務器上的所有內容,然後在它們中的每一個上應用該函數?
OR
將它取的第一個元素,應用功能,加載第二個元素,應用功能......直到最後一個人?
不,它不加載任何東西。這是基本原因:
> db.hotel.find().forEach
function (func){
while (this.hasNext())
func(this.next());
}
所以你看那個「引擎蓋下」這一切正在做的是提供比標準光標迭代方法「方便」包裝。
這只是一個幫手,無論是在shell還是在一般的驅動程序功能。
但是,如果你的「驅動程序」允許,那麼使用「流」接口,而這是一個更好的方法。
所以你說這是真實的「它會獲取第一個元素,應用函數,加載第二個元素元素,應用函數...直到最後一個?「 – arcom 2017-10-18 18:14:13
如果你關於遊標方法'.forEach()',那麼它應該迭代隊列中的每個獲取文檔。你可以在這裏找到更多關於光標迭代的信息http://docs.mongodb.org/manual/tutorial/iterate-a-cursor/ – monkeyinsight 2014-10-03 15:45:51