MongoDB:按日历周和年聚合文档并计算一个字段的所有值的总量
MongoDB: Aggregate Documents per Calender Week and Year and calculate the total amount of all Values of one field
{
"GU" : "Person2",
"CW" : 2,
"Year" : 2015,
"_id" : "01"
},
{
"GU" : "Person2",
"CW" : 2,
"Year" : 2015,
"_id" : "02"
},
{
"GU" : "Person1",
"CW" : 2,
"Year" : 2015,
"_id" : "03"
},
{
"GU" : "Person1",
"CW" : 3,
"Year" : 2015,
"_id" : "04"
},
{
"GU" : "Person1",
"CW" : 51,
"Year" : 2014,
"_id" : "05"
},
{
"GU" : "Person1",
"CW" : 51,
"Year" : 2014,
"_id" : "06"
}
有没有办法聚合我的数据,以便按 CW 和 Year 进行分组,并且我可以获得每周不同人员的数量?
所以最后我的数据应该是这样的:
{Year: 2014, CW:51, GU:{Person1:2}},
{Year: 2015, CW:2, GU:{Person1:1, Person2:2}},
{Year: 2015, CW:3, GU:{Person1:1}}
您可以通过连续两次分组轻松实现:
db.mycol.aggregate([
{$group:{
_id: {Year: "$Year", CW:"$CW", GU: "$GU"},
total:{
$sum:1
}
}},
{$group:{
_id: {Year: "$_id.Year", CW:"$_id.CW"},
GUs: { $push: { GU: "$_id.GU", total: "$total" } }
}},
{$sort: {"_id.Year" : 1, "_id.CW" : 1}}
])
编辑:将排序添加到聚合管道
结果将是:
{
"result" : [
{
"_id" : {
"Year" : 2014,
"CW" : 51
},
"GUs" : [
{
"GU" : "Person1",
"total" : 2
}
]
},
{
"_id" : {
"Year" : 2015,
"CW" : 2
},
"GUs" : [
{
"GU" : "Person1",
"total" : 1
},
{
"GU" : "Person2",
"total" : 2
}
]
},
{
"_id" : {
"Year" : 2015,
"CW" : 3
},
"GUs" : [
{
"GU" : "Person1",
"total" : 1
}
]
}
],
"ok" : 1
}
{
"GU" : "Person2",
"CW" : 2,
"Year" : 2015,
"_id" : "01"
},
{
"GU" : "Person2",
"CW" : 2,
"Year" : 2015,
"_id" : "02"
},
{
"GU" : "Person1",
"CW" : 2,
"Year" : 2015,
"_id" : "03"
},
{
"GU" : "Person1",
"CW" : 3,
"Year" : 2015,
"_id" : "04"
},
{
"GU" : "Person1",
"CW" : 51,
"Year" : 2014,
"_id" : "05"
},
{
"GU" : "Person1",
"CW" : 51,
"Year" : 2014,
"_id" : "06"
}
有没有办法聚合我的数据,以便按 CW 和 Year 进行分组,并且我可以获得每周不同人员的数量?
所以最后我的数据应该是这样的:
{Year: 2014, CW:51, GU:{Person1:2}},
{Year: 2015, CW:2, GU:{Person1:1, Person2:2}},
{Year: 2015, CW:3, GU:{Person1:1}}
您可以通过连续两次分组轻松实现:
db.mycol.aggregate([
{$group:{
_id: {Year: "$Year", CW:"$CW", GU: "$GU"},
total:{
$sum:1
}
}},
{$group:{
_id: {Year: "$_id.Year", CW:"$_id.CW"},
GUs: { $push: { GU: "$_id.GU", total: "$total" } }
}},
{$sort: {"_id.Year" : 1, "_id.CW" : 1}}
])
编辑:将排序添加到聚合管道
结果将是:
{
"result" : [
{
"_id" : {
"Year" : 2014,
"CW" : 51
},
"GUs" : [
{
"GU" : "Person1",
"total" : 2
}
]
},
{
"_id" : {
"Year" : 2015,
"CW" : 2
},
"GUs" : [
{
"GU" : "Person1",
"total" : 1
},
{
"GU" : "Person2",
"total" : 2
}
]
},
{
"_id" : {
"Year" : 2015,
"CW" : 3
},
"GUs" : [
{
"GU" : "Person1",
"total" : 1
}
]
}
],
"ok" : 1
}