MongoDB的嵌套分组
给定一个数据库MongoDB的嵌套分组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,给定一个数据库 [ { gender: "m", age: 1, name: "A" }, { gender: "f", age: 2, name: "B" }, { gender: "m", age: 3, name: "C" }, { gender: "f", age: 1, name: "D" }, { gender: "m", age: 2, name: "E" }, { gender: "f", age: 3, name: "F" }, { gender: "m", age: 1, n
[
{ gender: "m", age: 1, name: "A" },
{ gender: "f", age: 2, name: "B" },
{ gender: "m", age: 3, name: "C" },
{ gender: "f", age: 1, name: "D" },
{ gender: "m", age: 2, name: "E" },
{ gender: "f", age: 3, name: "F" },
{ gender: "m", age: 1, name: "G" },
{ gender: "f", age: 2, name: "H" },
{ gender: "m", age: 3, name: "I" },
{ gender: "f", age: 1, name: "J" }
]
我想先按年龄分组,然后按性别分组,这样我会得到一个嵌套的结果
[{
_id: "1",
children: [
{ _id: "f" },
{ _id: "m" }
]
}, {
_id: "2",
children: [
{ _id: "f" },
{ _id: "m" }
]
}, {
_id: "3",
children: [
{ _id: "f" },
{ _id: "m" }
]
}]
以下是我迄今为止所做的尝试:
db.example.aggregate(
{ $group: { _id: "$age", children: { $addToSet: {
age: "$age", gender: "$gender", name: "$name"
}}}},
{ $group: { _id: "$children.gender"}}
)
但这将返回一个
{u id:null}
作为其结果。这是可能的,如果是的话,怎么做?像这样的事情应该可以做到
db.example.aggregate(
{
$group: {
_id: { age: "$age", gender: "$gender" },
names: { $addToSet: "$name" }
}
},
{
$group: {
_id: { age: "$_id.age" },
children: { $addToSet: { gender: "$_id.gender", names:"$names" } }
}
}
)
…给出了结果
{
"_id" : {
"age" : 1
},
"children" : [
{ "gender" : "m", "names" : [ "G", "A" ] },
{ "gender" : "f", "names" : [ "J", "D" ] }
]
},
...
如果您想将年龄设置为示例中的\u id
,只需将第二个分组的\u id
替换为
_id: "$_id.age",
我一直在寻找这个,因为我一直在尝试重新创建失败,但还有一个问题,我如何计算性别?每个年龄段的性别出现多少次?