好,所以我想按日期(月/年)来获取添加的项目类型的累积计数
我能够按月/年进行分组并键入...我的数字(总和)为我提供了该月的计数...但是之后我是那个月加上之前的所有月份...
这是我到目前为止所拥有的
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
但是我想说的是(累积的)
Aug-18 Sep-18
Boat: 2 3
Car: 2 3
Train: 1 2
答案 0 :(得分:0)
$project
阶段和项目年份,类型和月份,但对于月份,请使用$range输出一个数组,其中包含从实际月份到年底的所有月份。$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,
},
])