MongoDB中的投影[附例子]
已發表: 2020-09-15MongoDB 是處理和管理大數據的最著名的現代數據庫之一。 它是一個 NoSQL 面向文檔的數據庫,它使用類似 JSON 的文檔來更輕鬆地管理數據。
各種MongoDB 項目想法可以輕鬆實現。 然而,MongoDB 也有一些缺點。 默認情況下,對特定文檔的任何查詢都會顯示所有數據——這個問題在MongoDB 投影的幫助下得到解決。
目錄
什麼是 MongoDB 中的投影?
MongoDB 中的投影將數據輸出限製到指定字段,而不是顯示所有字段。 這是在 find() 方法的幫助下完成的。 find() 方法接受一個可選參數,允許我們包含或排除某些輸出字段。 讓我們深入研究如何在 MongoDB 中使用投影。
Find() 方法的語法
MongoDB 中的投影是在 find() 方法的幫助下進行的,其語法為:
D b。 collection_name .find({}, { field_Key:1 or 0 })
在上述語法中, collection_name是我們需要從中檢索數據的文檔。 然後 find() 方法中有兩個參數——第一個接受查詢,第二個用於投影。 語法中的field_Key是我們要包含或排除的字段的名稱。

我們需要為每個 field_Key 傳遞一個布爾值。 此值定義我們是要包含該字段還是排除它。 如果我們對一個字段輸入 1,它將顯示在結果中,如果我們包含 0,它將被隱藏。
示例數據庫
讓我們在數據庫中創建一個示例文檔,以便我們可以在本文中引用它。
db.example.studentData([
{_id: ObjectId(“59kf63795bc1d”), student_name: “Alexander”, student_id: 01, student_status: “A”, student_age: 22}
{_id: ObjectId(“59ke62794bc1d”), student_name: “Steve”, student_id: 02, student_status: “A”, student_age: 23}
{_id: ObjectId(“59kg73795bf1e”), student_name: “Luke”, student_id: 03, student_status: “A”, student_age: 21}
{_id: ObjectId(“59kb69995ah1d”), student_name: “Bravo”, student_id: 04, student_status: “B”, student_age: 25}
])
這是我們名為 example 的數據庫文檔,我們將在所有示例中用作參考。
在 MongoDB 中檢索帶有和不帶有投影的數據
1. 無投影檢索的語法
檢索學生狀態為“A”的學生的所有字段(不使用投影)。
db.example.find({student_status: “A”})
這對應於 SQL 中的 Select * from example WHERE student_status = “A” query。 在 MongoDB 中檢索沒有投影的數據將產生以下結果:
{“_id”:ObjectId(“59kf63795bc1d”),“student_name”:“Alexander”,“student_id”:01,“student_status”:“A”,student_age:22}
{“_id”:ObjectId(“59ke62794bc1d”),“student_name”:“Steve”,“student_id”:02,“student_status”:“A”,“student_age”:23}
{“_id”:ObjectId(“59kg73795bf1e”),“student_name”:“Luke”,“student_id”:03,“student_status”:“A”,student_age:21}
默認情況下,它會顯示數據的所有字段,其中 student_status = “A”。 為了限制輸出字段,我們可以在 MongoDB 中使用投影。

2.投影檢索的語法
檢索所有學生的 student_name 和 student_status。
db.example.find({}, {student_name: 1, student_status: 1})
這將顯示以下結果:
{“_id”:ObjectId(“59kf63795bc1d”),“student_name”:“Alexander”,“student_status”:“A”}
{“_id”:ObjectId(“59ke62794bc1d”),“student_name”:“Steve”,“student_status”:“A”}
{“_id”:ObjectId(“59kg73795bf1e”),“student_name”:“Luke”,“student_status”:“A”}
{“_id”:ObjectId(“59kb69995ah1d”),學生姓名:“Bravo”,學生身份:“B”}
_id 在 MongoDB 中使用投影時默認顯示,除非我們禁止它。
在 MongoDB 中使用投影時抑制 _id
抑制默認_id並顯示所有學生的student_id、student_name和student_status。
db.example.find({}, {_id: 0, student_id: 1, student_name: 1, student_status: 1})
這將產生以下結果:
{“student_id”:01,“student_name”:“亞歷山大”,“student_status”:“A”}
{“student_id”:02,“student_name”:“史蒂夫”,“student_status”:“A”}
{“student_id”:03,“student_name”:“Luke”,“student_status”:“A”}
{“student_id”:04,“student_name”:“Bravo”,student_status:“B”}
3. 包容與排斥相結合
不包括_id和student_id,包括所有學生的student_name和student_status。
db.example.find({}, {_id: 0, student_id: 0, student_name: 1, student_status: 1})
這將產生以下結果:
錯誤:錯誤:{
“waitedMS” : NumberLong(0),
“好”:0,
“errmsg” : “投影不能混合包含和排除。”,
“代碼”:2
}
在使用MongoDB 投影時結合包含和排除將引發錯誤,因為我們不能在同一個查詢中同時執行兩者。 _id 字段是此規則的一個例外。
您會注意到,我們在之前的示例中使用了包含和排除的組合,其中我們抑制了 _id 並顯示了一些其他字段,並且效果很好。 由於規則的例外,我們排除了 _id 並包含了其餘字段。
4. 在 MongoDB 中通過排除指定投影
排除所有學生的 _id 和 student_status 並顯示其他字段。
db.example.find({}, {_id: 0, student_status: 0})
{“學生姓名”:“亞歷山大”,“學生 ID”:01,“學生年齡”:22}
{“student_name”:“史蒂夫”,“student_id”:02,“student_age”:23}
{“student_name”:“Luke”,“student_id”:03,“student_age”:21}
{“student_name”:“Bravo”,“student_id”:04,“student_age”:25}
您還可以使用四個投影運算符來限制輸出字段,但 find() 方法不支持它們。 可以使用的投影操作符有-$、$elemMatch、$slice 和$meta。

另請閱讀: MongoDB 真實世界用例
結論
通過在 MongoDB中使用投影,我們可以控制在前端顯示數據,這增加了它的實際用例。 近年來,MongoDB 取得了幾個里程碑。 這讓MongoDB 的未來前景一片光明,眾多企業都在尋找具備 MongoDB 知識的全棧開發人員。
因此,現在是在簡歷中加入 MongoDB 技能的好時機。 但是,在當今競爭激烈的世界中,僅管理數據庫是不夠的。 因此,如果您的目標是成為一名全棧開發人員或學習業務分析以了解和分析您正在管理的數據並幫助企業表現良好,這將有所幫助。 upGrad可以幫助您入門。
我們 upGrad 提供詳細的學習資源以及實踐經驗和工作幫助。 我們與多家機構合作,為您提供最好的教育和認證。 您可以選擇是選擇參加商業分析認證課程還是參加全棧軟件開發 PG 文憑課程。 無論您想在生活中從事什麼職業,我們都能滿足您的需求。
從世界頂級大學在線學習軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
