我在处理客户请求时遇到麻烦。我有以下数据:
{
"_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
非常感谢, 吉姆