首页 > 解决方案 > Mongodb 聚合 $group 并计算日期范围

问题描述

我有这样的文件:

{
    "_id" : ObjectId("5cc80389c723e046f504b5a9"),
    "adddress" : "string",
    "checkIn" : "2019-04-30T08:12:57.909Z"
},

{
    "_id" : ObjectId("5cc995f5a6f3eb7c483b019f"),
    "adddress" : "string",
    "checkIn" : "2019-05-01T12:49:57.561Z"
}

我试过这样的聚合:

     var start = new Date("2019-04-30T08:12:57.909Z");
        var end = new Date("2019-05-01T12:49:57.561Z");
        var pipeline = [
        {
            $match: {
                checkIn: {
                    $gte: start,
                    $lte: end
                }
            }
        },
        {
            $group: {
                _id: {
                    year: {
                        $year: "$checkIn"
                    },
                    month: {
                        $month: "$checkIn"
                    },
                    day: {
                        $dayOfYear: "$checkIn"
                    }
                },
                count: {
                    $sum: 1
                }
            }
        }];

db.collections.aggregate(管道).toArray()

是否可以按签入日期计算它们并获得如下结果:

    "_id": [{
        "checkIn": "2019-03-15T00:00:00Z",
        "count": 4
    }, {
        "checkIn": "2019-04-30T00:00:00Z",
        "count": 1
    }, {
        "checkIn": "2019-05-10T00:00:00Z",
        "count": 1
    }],

标签: mongodb

解决方案


The result is shown the total number of the day.

{$project: {
  checkIn: { $dateToString: { format: '%Y-%m-%d', date: '$checkIn' } }
}},
{$group: {
  _id: '$checkIn',
  checkIn: {$first: '$checkIn'},
  count: {$sum: 1}
}},
{$sort: {checkIn: 1}}

推荐阅读