2014-10-03 21 views
1

我有很多數據從mongodb數據庫中獲取。我無法一次加載服務器上的所有數據,因爲它太大而且內存不足。MongoDb:是否每個好記憶都是明智的?

如果我使用forEach,它會獲取所有內容並加載服務器上的所有內容,然後在它們中的每一個上應用該函數?

OR

將它取的第一個元素,應用功能,加載第二個元素,應用功能......直到最後一個人?

+0

如果你關於遊標方法'.forEach()',那麼它應該迭代隊列中的每個獲取文檔。你可以在這裏找到更多關於光標迭代的信息http://docs.mongodb.org/manual/tutorial/iterate-a-cursor/ – monkeyinsight 2014-10-03 15:45:51

回答

1

不,它不加載任何東西。這是基本原因:

> db.hotel.find().forEach 
function (func){ 
    while (this.hasNext()) 
     func(this.next()); 
} 

所以你看那個「引擎蓋下」這一切正在做的是提供比標準光標迭代方法「方便」包裝。

這只是一個幫手,無論是在shell還是在一般的驅動程序功能。

但是,如果你的「驅動程序」允許,那麼使用「流」接口,而這是一個更好的方法。

+0

所以你說這是真實的「它會獲取第一個元素,應用函數,加載第二個元素元素,應用函數...直到最後一個?「 – arcom 2017-10-18 18:14:13

相關問題