使用 $week 运算符按时间顺序排列

Chronological ordering with the $week operator

当您按一周内的日期对文档进行分组时,$week 运算符非常有用。但是,是否有排序运算符可以按时间顺序而不是数字对文档进行排序?

我想以这样一种方式对文档进行排序,以便在跨年时很容易看到分组。我的理解是选项是 0-53 或 53-0。

当我在 1 月 10 日 运行 汇总时,我想要订购 1, 0, 53, 52, 51...

的文件

这可能吗?

db.users.aggregate([
{$match : {dateC : {$gte : new ISODate('2014-12-01')}}},
{$project : {now : {$week:new Date()},dateC:1}},
{$group : { _id:{ week : {"$week":"$dateC"}, now : "$now"}, 
            count : {$sum:1} } },
{ $sort : {'_id.week':1} }
])

您可以通过将年份添加到聚合中来做到这一点:

db.users.aggregate([
    {$match : {dateC : {$gte : new ISODate('2014-12-01')}}},
    {$project : {
        week: {$week:"$dateC"},
        year: {$year:"$dateC"},
    }},
    {$group : {
        _id:{ year : "$year", week : "$week"},
        count : {$sum : 1}
    }},
    {$sort : {'_id.year':-1, "_id.week" : -1}}
]);

不过要小心,没有任何数据的周数不会显示在结果中。