MongoDB - 基于日期的数组聚合计数

问题描述 投票:0回答:1

所以我正在尝试进行聚合查询。我的文档看起来像这样:

{
    "_id": ObjectId(),
    "value": [1,2],
    "date": ISODate("2016-06-02T03:02:00.000Z")
},
{
    "_id": ObjectId(),
    "value": [1,2],
    "date": ISODate("2016-06-06T03:02:00.000Z")
},
{
    "_id": ObjectId(),
    "value": [3,2],
    "date": ISODate("2017-04-06T03:02:00.000Z")
}

我想计算相同数组value在特定年份月发生的次数。

我通过写这个聚合得到了日期:

{
    "$group":
    {
        '_id':
        {
            "$dateToString":
            {
                "format": "%Y-%m",
                "date": "$launch_time"
            }
        }
    }
},
{
    "$sort":
    {
        "_id": -1
    }
},
{
    "$project":
    {
        "date": "$_id",
        "_id": 0,
    }
}

这给了我结果:

{'date': '2016-04'} ..so on

我已经成功计算了数组:

{
    "$group":
    {
        "_id": "$home_coordinates",
        "count":
        {
            "$sum": 1
        }
    }
}

这给了我输出:

{'_id': [1,2], 'count': 2} ..so on

如何以这样的方式组合这些2,我的结果看起来像这样?

{
    "date": "2016-06",
    "value": [1,2],
    "count": 2
},
{
    "date": "2017-04",
    "value": [3,2],
    "count": 1
}

因此,如何根据日期计算类似的数组?

mongodb aggregation-framework mongoengine
1个回答
0
投票

试试这个

db.collection.aggregate([
{
$addFields:{
    date:{ $substr: ["$date", 0, 10] }

    }
},
{
$group:{
    _id:"$date",
    date:{$first:"$date"},
    value:{$first:"$value"},
    count:{$sum:1}
    }
}
])
© www.soinside.com 2019 - 2024. All rights reserved.