第五課 MongoDB 數據查詢(二)

1.課程大綱
   
    本課程繼續講解 MongoDB 數據查詢相關的內容,包括MongoDB的遊標、模糊查詢以及findAndModify函數的使用。
          1.MongoDB 的遊標
          2.模糊查詢
          3.findAndModify 函數的使用

2.課程簡介
       首先來講解MongoDB 的查詢結果返回過程,回顧一下在上次課介紹 find 函數時所講的內容,在上次課介紹文檔查詢函數 find 時提到,它的返回值是一個 cursor 遊標對象。在實際的 JavaScript 腳本中,使用的是 cursor 變量來保存 find 函數返回的結果,然後使用 printjson 來打印 cursor 變量中的所有文檔。  
       其實當我們使用 find 函數進行文檔查詢時,MongoDB 並不是一次返回結果集中的所有文檔,而是以多條文檔的形式分批來返回查詢結果,返回的文檔會緩存到內存中,每次返回的數據量不會超過4MB。 find 函數的返回值是一個cursor 遊標,默認情況下,第一次它會返回結果集的前 101 個文檔,或 1 MB 的數據,這取決於哪個條件先滿足,如果 101 個文檔的數據量大於1MB的話,那麼返回的文檔數目將小於101個;之後,每當緩存的文檔被全部迭代完後 cursor 遊標會向繼續向數據庫請求數據,從第二批次開始,每次最多可以返回 4 MB 的文檔,直到將結果集中的文檔全部輸出。  
       爲了更好的說明上述數據查詢過程,下面通過一個動畫來模擬一下。這裏表示的是數據庫服務,客戶端使用find函數發出查詢請求,我們假設 find 函數返回的查詢結果一共有十條文檔,這十條結果將分批來返回,假設每一次返回5條文檔。第一批次find函數返回的五條文檔會緩存到內存中,cursor 遊標變量會指向第一條文檔,這時,我們就可以使用cursor變量來操作結果集了,可以迭代輸出緩存的文檔。 當遍歷完最後一條文檔後,cursor 遊標會自動向數據庫服務發送一個 getMore 的數據請求,然後對返回的結果再次進行迭代輸出,如此反覆,直到結果集中的所有文檔都完全輸出。 
       這種批量返回結果的好處是,一方面它可以減少客戶端對服務器連接次數,從而減輕服務器的查詢負擔,另一方面當查詢的結果集很大的時候,這種批量返回結果的方式可以減少客戶端的延遲,提高數據的處理效率。  
       需要說明的是,如果要在一個沒有建立索引的字段上進行排序操作的話,在返回結果之前,數據庫服務需要將滿足查詢條件的所有文檔都加載到內存中來進行排序。如果結果集很大時,會嚴重的消耗內存資源。所以對文檔中經常使用的字段建立索引,不僅可以提高文檔的查詢速度,而且可以減少對內存佔用。

3.詳細課程視頻
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章