第五課 MongoDB 資料查詢(二),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.詳細課程視頻 視頻課程連結如下:[MongoDB 資料查詢(二)]
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。