首页 > 解决方案 > MognoDB - 基于日期的数组聚合计数

问题描述

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

{
    "_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

我如何将这两个结合起来,使我的结果看起来像这样?

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

因此,我如何根据date计算相似的数组?

标签: mongodbaggregation-frameworkmongoengine

解决方案


试试这个

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

    }
},
{
$group:{
    _id:"$date",
    date:{$first:"$date"},
    value:{$first:"$value"},
    count:{$sum:1}
    }
}
])

推荐阅读