Mongodb中的Date字段-按日期字段划分的组ID Year-Aggregation Framework

时间:2018-08-16 16:53:30

标签: mongodb mongodb-query aggregation-framework

我在处理客户请求时遇到麻烦。我有以下数据:

{ 
    "_id" : "6489", 
    "post_date" : ISODate("2014-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6490", 
    "post_date" : ISODate("2014-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6491", 
    "post_date" : ISODate("2014-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6492", 
    "post_date" : ISODate("2014-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6493", 
    "post_date" : ISODate("2015-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6494", 
    "post_date" : ISODate("2015-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6495", 
    "post_date" : ISODate("2016-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6496", 
    "post_date" : ISODate("2016-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6497", 
    "post_date" : ISODate("2016-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6498", 
    "post_date" : ISODate("2016-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6499", 
    "post_date" : ISODate("2016-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}
{ 
    "_id" : "6500", 
    "post_date" : ISODate("2017-12-20T17:00:00.000+0000"), 
    "post_modified" : ISODate("2014-06-28T14:33:57.000+0000")
}

我需要输出一个表,其中显示年份(posting_date)和帖子数(_id)。在SQL中,这将是一个_id并按posting_date(year)进行分组。

问题是发布日期的格式,我必须从中提取年份。格式如下:

 "post_date" : ISODate("0105-08-17T00:00:00.000+0000")

我已经写了一个代码,但是没有用。这是我的代码:

db.posts.aggregate(
    [
    {
       $project:
         {
           year: { $year: "$post_date" }
         }
     },
        { 
            "$group" : {
                "_id" : {
                    "post_date" : "$post_date"
                }, 
                "COUNT(_id)" : {
                    "$sum" : NumberInt(1)
                }
            }
        }, 
        { 
            "$project" : {
                "_id" : NumberInt(0), 
                "COUNT(_id)" : "$COUNT(_id)", 
                "post_date" : "$_id.post_date"
            }
        }, 
        { 
            "$sort" : {
                "COUNT(_id)" : NumberInt(-1)
            }
        }
    ]
);

有人对我的代码有想法或发现错误吗?我很乐意提供帮助。 输出应如下所示:

post_date   number of posts
2014    4
2015    2
2016    5
2017    1

非常感谢, 吉姆

0 个答案:

没有答案