Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取数组mongodb中字段的值_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

如何获取数组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,[]};