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,
    },
])