MongoDB数组显示自定义列

在MongoDB中,经常会用到数组来存储一组数据。有时候,我们需要显示数组中的特定列,而不是全部内容。本文将详细介绍如何在MongoDB中显示数组中的自定义列。
创建示例数据
首先,让我们创建一个示例集合,其中包含数组数据。我们以学生信息为例,每个学生有姓名、年龄和成绩(存储在数组中)。
use mydatabase
db.students.insert([
{
name: "Alice",
age: 20,
grades: [80, 90, 85]
},
{
name: "Bob",
age: 22,
grades: [75, 85, 95]
},
{
name: "Charlie",
age: 21,
grades: [70, 80, 90]
}
])
显示所有列
首先,让我们看看如何显示所有列的数据。
db.students.find()
运行以上命令后,将得到如下结果:
{ "_id" : ObjectId("616259b6926ff28c6e42d5f4"), "name" : "Alice", "age" : 20, "grades" : [ 80, 90, 85 ] }
{ "_id" : ObjectId("616259b6926ff28c6e42d5f5"), "name" : "Bob", "age" : 22, "grades" : [ 75, 85, 95 ] }
{ "_id" : ObjectId("616259b6926ff28c6e42d5f6"), "name" : "Charlie", "age" : 21, "grades" : [ 70, 80, 90 ] }
显示自定义列
如果我们只想显示学生的姓名和第一个成绩,可以使用投影操作符$project。
db.students.aggregate([
{
project: {
name: 1,
firstGrade: {arrayElemAt: ["$grades", 0] }
}
}
])
运行以上命令后,将得到如下结果:
{ "_id" : ObjectId("616259b6926ff28c6e42d5f4"), "name" : "Alice", "firstGrade" : 80 }
{ "_id" : ObjectId("616259b6926ff28c6e42d5f5"), "name" : "Bob", "firstGrade" : 75 }
{ "_id" : ObjectId("616259b6926ff28c6e42d5f6"), "name" : "Charlie", "firstGrade" : 70 }
在上面的示例中,我们使用$arrayElemAt来获取数组中的第一个元素,然后将其作为自定义列firstGrade显示出来。
显示所有成绩大于85分的学生
如果我们想要只显示成绩大于85分的学生,可以使用过滤操作符$match。
db.students.aggregate([
{
project: {
name: 1,
grades: 1
}
},
{unwind: "grades"
},
{match: {
grades: { $gt: 85 }
}
}
])
运行以上命令后,将得到如下结果:
{ "_id" : ObjectId("616259b6926ff28c6e42d5f4"), "name" : "Alice", "grades" : 90 }
{ "_id" : ObjectId("616259b6926ff28c6e42d5f5"), "name" : "Bob", "grades" : 95 }
{ "_id" : ObjectId("616259b6926ff28c6e42d5f6"), "name" : "Charlie", "grades" : 90 }
在上面的示例中,我们先使用$unwind将数组展开,然后使用$match进行过滤,只显示成绩大于85分的学生。
总结
通过以上示例,我们学习了如何在MongoDB中显示数组的自定义列。使用投影操作符$project和过滤操作符$match,我们可以根据需求灵活地显示所需的数据列。
极客教程