Contents

您必須了解的 11 個 MongoDB 查詢和操作

MongoDB 因其多功能性、可擴展性和海量數據的高效管理等卓越功能而在開發人員中獲得了相當大的歡迎。作為當代軟件應用程序的理想選擇,MongoDB 為用戶提供了提高標準化查詢和操作流程熟練程度的機會。

通過對流行的 MongoDB 查詢和過程的複雜理解,人們可以有效地提取和更改信息,同時構建強大的數據結構和用戶響應程序,從而提高他們的熟練程度。

創建或切換數據庫

使用 MongoDB shell 創建本地數據庫是一個並不復雜的過程,特別是當已經建立了遠程集群時。要在 MongoDB 中生成新數據庫,請使用以下命令:

 use db_name 

雖然執行前面提到的命令成功地建立了一個新的數據庫,但也可以使用它來轉換到一個已經存在的數據庫,而無需進行從頭創建的過程。

刪除數據庫

首先,像我們之前一樣,使用 use 命令來連接到需要刪除的所需數據庫。接下來,使用 dropDatabase() 函數從系統中完全刪除數據庫。

 use db_name
db.dropDatabase()

創建一個集合

要在目標數據庫中建立集合,請在 MongoDB 環境中使用 createCollection() 方法:

 db.createCollection("collection_name")

將 collection_name 替換為您選擇的集合名稱。

將文檔插入集合

當將信息傳輸到存儲庫時,可以傳輸單個記錄或作為一個整體的一組記錄。

要插入單個文檔:

 db.collection_name.insertOne({"Name":"Idowu", "Likes":"Chess"})

人們可以利用上述方法合併一組包含單個唯一標識符的文檔:

 db.collection_name.insertOne([{"Name":"Idowu", "Likes":"Chess"}, {"Language": "Mongo", "is_admin": true}])

要同時添加具有唯一標識符的多個文檔,請使用“insertMany”方法:

 db.collection_name.insertMany([{"Name":"Idowu", "Likes":"Chess"}, {"Name": "Paul", "Likes": "Wordle"}])

從集合中獲取所有文檔

為了檢索指定集合中的所有文檔,可以使用相關數據庫關鍵字的“find()”方法。

 db.collection_name.find()

上述方法檢索指定集合中包含的每個文檔。

/bc/images/query-result-sample-mongodb-find.jpg

您還可以將檢索到的信息限制為特定數量。例如,考慮以下指令來僅獲取最初的兩條記錄:

 db.collection_name.find().limit(2)

過濾集合中的文檔

以數據集為例,其中 MongoDB 領域存在多種過濾方法。

/bc/images/sample-data-for-filtering.jpg

從文檔中的單個字段檢索信息時,請使用“查找”方法。

 db.collection_name.find({"Likes":"Wordle"}, {"_id":0, "Name":1})

上述查詢檢索出現術語“Likes”的所有文檔,同時忽略特定文檔標識符並僅關注文檔名稱。

/bc/images/filter-example-one.jpg

為了檢索21歲以上的用戶名列表,可以使用表示為“$gt”的大於運算符。

 db.collection_name.find({"Likes":"Chess", "Age":{"$gt":21}}, {"_id":0, "Name":1})

輸出看起來像這樣:

/bc/images/filter-example-two.jpg

將“find”替換為“findOne”後,應謹慎觀察功能的任何變化。應該注意的是,系統內存在許多附加的過濾關鍵字。

符號“$lt”表示一個邏輯表達式,對於所有小於指定值的值,其計算結果為 true,否則為 false。

符號“$gte”表示在查詢和表達式中使用的邏輯運算符,表示某個值必須等於或大於特定值。用簡單的英語可以表示為“大於或等於”。

符號“$lte”表示一個邏輯表達式,用於評估給定值是否小於或等於另一個指定值,如果滿足條件,則結果為 true,否則為 false。

函數“=”檢索給定集合中等於特定值的所有元素。

不具有指定值的所有元素的集合表示為“$ne”。

當基於數組查詢數據時,可以使用“$in”運算符,檢索與指定數組中的任何項目相對應的所有元素。相反,“$not in ($)”(或“$nin”)運算符用於返回與所提供數組中的任何值都不匹配的元素的結果。

對查詢進行排序

排序是根據特定標準按預定順序(降序或升序)排列數據的過程。值得注意的是,排序需要使用可量化的度量來正確執行。

例如,要按升序排序:

 db.collection_name.find({"Likes":"Chess"}).sort({"Age":1})

要將上述查詢按降序排列,請將“1”替換為“-1”。

 db.collection_name.find({"Likes":"Chess"}).sort({"Age":-1})

更新文檔

MongoDB 利用原子運算符與更新查詢相結合來確定數據修改的所需結果。下面,我們為此目的編譯了一些常用的原子運算符:

事實上,您提供的兩部分文本之間的術語似乎存在一些不一致。在第一部分中,術語“集”用於指表單上的一組字段,而在第二部分中,術語“字段集”用於具體表示具有共同目的的一組字段。為了清晰和一致性,標準化兩個部分使用的語言可能會有所幫助。

$push 命令用於向數組添加新元素,並且可以與 $each 運算符配對以同時插入多個元素。

$pull 函數是一個根據指定鍵值從數組中刪除一個或多個元素的命令。它可以與“$in”運算符結合使用,通過為“values”參數指定一個值數組,可以一次有效地刪除多個項目。

MongoDB 中的 $unset 命令用於從現有文檔中刪除一個或多個特定字段。此操作可以在任何集合上執行,它將更新該集合中的所有文檔,並刪除指定的字段。使用 unset 方法的語法包括指定您希望取消設置的字段的名稱以及用於修改查詢的選項(如有必要)。

為了修改現有文檔,同時加入新元素,請考慮以下步驟:1。訪問您想要修改的文檔並對其內容或格式進行所需的更改。這可能涉及糾正錯誤、更新過時的信息或添加新的詳細信息。2.根據您的目的和目標確定需要進行哪些具體更改。例如,如果您想在文檔中包含其他數據字段,請決定這些字段應包含什麼類型的信息以及如何在文檔的整體結構中組織它們。3。通過直接對文檔本身進行適當的修改來實施更改。根據更新的性質,這可能涉及編輯文本、調整格式或添加新部分。4。仔細審查修訂後的文件,以確保

 db.collection_name.updateOne({"Name":"Sandy"}, {"$set":{"Name":"James", "email":"[email protected]"}})

上述修改以如下方式修改指定文本:

/bc/images/sample-update-query.jpg

消除電子郵件字段的過程可以使用“$unset”運算符輕鬆執行,該運算符是一個強大的工具,可以有效地從 PHP 中的數組和對像中刪除不需要的元素。此操作只需指定要刪除的所需元素,然後是“$unset”關鍵字,允許開發人員有效地管理數據結構,同時保持代碼的清晰度和精確度。

 db.collection_name.updateOne({"Name":"Sandy"}, {"$unset":{"email":"[email protected]"}})

考慮以下示例數據:

/bc/images/sample-data-for-update-example.jpg

人們可以通過使用 $push 運算符來增加 items 數組中當前元素的內容,這允許將新條目引入到數據點的累積中。

 db.collection_name.updateOne({"Name":"Pete"}, {"$push":{"items":"Plantain"}})

這是輸出:

/bc/images/update-query-result-sample.jpg

利用 $each 運算符同時插入多個元素:

 db.collection_name.updateOne({"Name":"Pete"}, {"$push":{"items": {"$each":["Almond", "Melon"]}}})

這是輸出:

/bc/images/updated-data-multiple-updates.jpg

如前所述,使用“$pull”運算符會導致刪除數組中的指定元素或鍵值對。

 db.collection_name.updateOne({"Name":"Pete"}, {"$pull":{"items":"Plantain"}})

更新後的數據如下所示:

/bc/images/removed-data-sample.jpg

要有效地從給定數組中消除多個元素,請使用“include\_array”函數並將所需的數組以及您希望排除的特定鍵或索引範圍傳遞給它。通過使用“include\_array”函數和“$in”運算符,您可以有效地同時過濾掉大量不需要的元素,而無需將它們一一刪除。

 db.collection_name.updateOne({"Name":"Pete"}, {"$pull":{"items": {"$in":["Almond", "Melon"]} }}) 

刪除文檔或字段

使用“deleteOne”或“deleteMany”關鍵字是為了從數據庫集合中刪除文檔。使用這些命令時,指定刪除所基於的特定字段至關重要。這允許有針對性地刪除特定記錄,同時保留可能擁有指定字段不同值的其他記錄。

 db.collection_name.deleteOne({"Name":"IDNoble"})

為了有效刪除共享相同鍵的多個文檔,建議使用“deleteMany”方法,而不是嘗試執行提供的查詢。此特定查詢將消除數據庫中其內容以“國際象棋”作為其列出的首選項之一的所有條目。

 db.collection.deleteMany({"Likes":"Chess"})

索引操作

索引是一種通過減少必須檢查的數據量來提高數據庫查詢效率的技術。這種優化可以通過在數據庫中經常使用的字段上創建索引來實現,這最終會提高查詢性能。

同樣,MongoDB 採用的索引技術反映了通過在特定字段上實施索引來優化 SQL 查詢所使用的技術。作為說明,請考慮在“名稱”字段上創建升序索引。

 db.collection.createIndex({"Name":1})

列出您的索引:

 db.collection.getIndexes()

除了前面提到的方法之外,還存在多種在 MongoDB 數據庫系統上下文中生成索引的替代方法。

聚合

聚合管道是 MapReduce 的改進迭代,有助於在 MongoDB 領域內運行和保存複雜的計算。 MapReduce 需要為映射和縮減過程編寫單獨的 JavaScript 函數,與此相反,Aggregation 通過利用專門內置的 MongoDB 過程提供了無縫體驗。

例如,考慮以下銷售數據:

/bc/images/sales-sample-data-from-mongodb-1.jpg

MongoDB 的聚合框架可以通過執行以下步驟來計算和保存每個產品分類的總銷售數據:

 db.sales.aggregate([{$group:{"_id":"$Section", "totalSold":{$sum:"$Sold"}}}, {$project:{"_id":0, "totalSold":1, "Section":"$_id"}}])

上述查詢返回以下內容:

/bc/images/aggregate-result-sample-1.jpg

掌握 MongoDB 查詢

MongoDB提供了多種查詢數據的技術,可以提高查詢效率。上面概述的基本查詢結構適用於不同的編程語言,並作為訪問 MongoDB 數據庫的入口點。

儘管基本語法可能存在差異,但某些編程語言承認不同的大小寫樣式。例如,Python 支持蛇形大小寫格式,而 JavaScript 採用駝峰式大小寫約定。在實施命名約定之前,調查並理解首選技術平台的要求至關重要。