MongoDB随时间累积分组
好的,我想得到按日期(月/年)添加的项目类型的累计计数 我可以得到月/年和类型的分组…我的数字(总和)给我该月的计数。。。但是我想要的是那个月加上之前的几个月 这是我到目前为止所拥有的MongoDB随时间累积分组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,好的,我想得到按日期(月/年)添加的项目类型的累计计数 我可以得到月/年和类型的分组…我的数字(总和)给我该月的计数。。。但是我想要的是那个月加上之前的几个月 这是我到目前为止所拥有的 Things.aggregate([ { $match: { 'dates.added': { $ne: null } } }, { $group: {
Things.aggregate([
{
$match: {
'dates.added': {
$ne: null
}
}
},
{
$group: {
_id: {
year: {
$year: '$dates.added'
},
month: {
$month: '$dates.added'
},
type: '$type'
},
}
},
{
$sort: {
'_id.year': -1,
'_id.month': -1,
'_id.type': 1
}
},
{
$limit: 100,
},
])
这会产生这样的结果
{
"_id" : {
"year" : 2018,
"month" : 9,
"type" : "Train"
},
"number" : 1.0
}
{
"_id" : {
"year" : 2018,
"month" : 9,
"type" : "Car"
},
"number" : 1.0
}
{
"_id" : {
"year" : 2018,
"month" : 9,
"type" : "Boat"
},
"number" : 1.0
}
{
"_id" : {
"year" : 2018,
"month" : 8,
"type" : "Car"
},
"number" : 2.0
}
{
"_id" : {
"year" : 2018,
"month" : 8,
"type" : "Boat"
},
"number" : 2.0
}
{
"_id" : {
"year" : 2018,
"month" : 8,
"type" : "Train"
},
"number" : 1.0
}
或者换一种说法:
Aug-18 Sep-18
Boat: 2 1
Car: 2 1
Train: 1 1
但我追求的是这个(累积)
- 添加一个
阶段和项目年份、类型和月份,但用于输出从实际月份到年底的所有月份的数组$project
- 月数组
按年份、月份、类型和使用$group
$sum
Things.aggregate([
{
$match: {
'dates.added': {
$ne: null
}
}
},{
$project: {
year: {
$year: '$dates.added'
},
month: {
$range: [ { "$month" : '$dates.added'} , 13 ]
},
type: '$type'
}
},{
$unwind: "$month",
},{
$group: {
_id: {
year:"$year",
month: "$month",
type: '$type'
},
number : { $sum : 1 }
}
},{
$sort: {
'_id.year': -1,
'_id.month': -1,
'_id.type': 1
}
},{
$limit: 100,
},
])
- 添加一个
阶段和项目年份、类型和月份,但用于输出从实际月份到年底的所有月份的数组$project
- 月数组
按年份、月份、类型和使用$group
$sum
Things.aggregate([
{
$match: {
'dates.added': {
$ne: null
}
}
},{
$project: {
year: {
$year: '$dates.added'
},
month: {
$range: [ { "$month" : '$dates.added'} , 13 ]
},
type: '$type'
}
},{
$unwind: "$month",
},{
$group: {
_id: {
year:"$year",
month: "$month",
type: '$type'
},
number : { $sum : 1 }
}
},{
$sort: {
'_id.year': -1,
'_id.month': -1,
'_id.type': 1
}
},{
$limit: 100,
},
])