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 课程、高级证书课程或硕士课程,以加快您的职业生涯。
