如何获取数组mongodb中字段的值
假设我的数据库结构为如何获取数组mongodb中字段的值,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,假设我的数据库结构为 { name: "alex", age: 21, school: [ {grade: 45, class: "elementary school", name: "blabla"}, {grade: 89, class: "high school", name: "blabla2"}, {grade: 12, class: "college", name: "blabla3"} ] }, {
{
name: "alex",
age: 21,
school: [
{grade: 45, class: "elementary school", name: "blabla"},
{grade: 89, class: "high school", name: "blabla2"},
{grade: 12, class: "college", name: "blabla3"}
]
},
{
name: "felix",
age: 45,
school: [
{grade: 12, class: "elementary school", name: "bla"},
{grade: 45, class: "high school", name: "bla2"},
{grade: 16, class: "college", name: "bla3"}
]
}
我想做的是得到每个名字的学校名称
{
name: alex,
school: ["blabla", "blabla2", "blabla3"]
},
{
name: felix,
school: ["bla", "bla2", "bla3"]
}
要做到这一点,
db.collection.aggregate([
{group: {_id: "$name", school: {$addToSet: {"$school.name"}}}}
])
但无法实现。我应该修改什么?在使用$unwind阶段进行分组之前,只需解开学校数组,如下所示:
db.collection.aggregate([
{$unwind: "$school"},
{$group: {_id: "$name", school: {$addToSet: "$school.name"}}}
])
输出:
{ "_id" : "felix", "school" : [ "bla3", "bla2", "bla" ] }
{ "_id" : "alex", "school" : [ "blabla3", "blabla2", "blabla" ] }
可以使用投影从数组中获取字段值。类似于db.collection.find{},{u id:0,name:1,school.name:1};或者使用aggregate db.collection.aggregate{$project:{{u id:0,name:1,school:$school.name};。对于每个学校文档中的不同名称值,可以使用db.collection.aggregate{$project:{{u id:0,name:1,学校:{$setUnion:[$school.name,[]};