使用 $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}}
]);
不过要小心,没有任何数据的周数不会显示在结果中。
当您按一周内的日期对文档进行分组时,$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}}
]);
不过要小心,没有任何数据的周数不会显示在结果中。