【问题标题】:MongoDB cumulative grouping over timeMongoDB随着时间的累积分组
【发布时间】:2019-12-22 05:58:24
【问题描述】:

好的,所以我想获取按日期(月/年)添加的项目类型的累积计数

我可以按月/年进行分组并输入...我的数字(总和)给了我那个月的计数...但我之后的是那个月加上之前的所有月份...

这是我目前所拥有的

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

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:
    • 添加$project 阶段和项目年份、类型和月份,但对于月份,请使用$range 输出一个包含从实际月份到年底的所有月份的数组
    • $unwind 月份数组
    • $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,
        },
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      相关资源
      最近更新 更多