SQL 查詢通常從資料庫伺服器傳回多行資料。關係資料庫提供游標,作為反覆運算每一行結果集的一種方法。這是否意味著 MongoDB 使用者運氣不好?事實上,MongoDB 的 db.collection.find() 函式會傳回一個游標。在 MongoDB 中,游標本身提供了用於處理個別列的額外功能。 在今天的文章中,我們將學習如何在 Navicat for MongoDB 中使用 MongoDB 游標。
簡單的反覆運算範例
透過執行 db.collection.find() 函式查詢將傳回指向傳回的文件集合的指標,而該指標就是游標。游標的預設行為是允許對查詢結果進行自動反覆運算。但是,開發人員可以明確瀏覽游標物件中傳回的項目。其中一種方法是使用 forEach() 游標方法。
在 Navicat 中,使用 find() 方法是很容易的。例如,你可以將預先定義的程式碼片段拖曳到查詢編輯器中:
或者,你可以使用「尋找建立工具」。只需選取「集合」或「檢視」即可擷取所有文件:
從那裡,你可以將 forEach() 直接鏈結至結果游標。在以下範例中,集合中的三個文件被列印至主控台。你可以在「列印輸出」索引標籤中檢視輸出結果:
不同種類的迴圈
像所有 JavaScript 物件一樣,游標可以儲存在變數中以備後用。由於 cursor.hasNext() 和 cursor.next() 方法,它還完全支援其他 JavaScript 建構(如 while 迴圈)。正如我們在本例中看到的,hasNext() 通知迴圈測試器是否有另一個文件要反覆運算;next() 則傳回所述文件。
printjson() 協助方法是一種方便的方法,取代了 print(tojson())。它基本上按照儲存在資料庫中的內容來輸出文件,只是將它們以 JSON 而不是BSON(對應的二進位檔案)的形式表示。
資料更新
回想一下 db.collection.find() 傳回一個指向傳回的文件集合的指標。這樣,文件欄位是完全可編輯的。因此,我們可以叫用 forEach() 方法來更新符合指定條件的文件。這是一個用於更新名稱等於「Tom Smith」的文件的函式:
在我們的案例中,只有一個對應的文件,但是理論上可以有很多。
資料轉換
有一種資料轉換類型是簡化資料集的結構,以使其更易於使用。為此,我們可以使用 map() 函式。本範例將 split() 函式套用於 name 欄位,以將其分解為名和姓氏兩個部分。然後,使用 reverse() 和 join() 方法將「Tom Smithers」轉換為「Smithers,Tom」:
總結
在本篇文章中,我們看到了 db.collection.find() 方法傳回的游標如何與各種方法一起使用以逐一查看文件,用於列印、修改、刪除或轉換其內容。是否對 Navicat for MongoDB 感興趣?你可以在這裡下載免費試用!