当您按照一周内的日期对文档进行分组时,$ 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} }
])
答案 0 :(得分: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}}
]);
但要小心,没有任何数据的数周不会显示在结果上。