2015-02-15 3 views
0

Оператор $ week отлично работает, когда вы группируете документы по датам в течение недели. Однако существует ли оператор сортировки, который может сортировать документ хронологически, а не численно?

Я хотел бы сортировать документы таким образом, чтобы их было легко увидеть, когда они пересекают новый год. Я понимаю, что варианты: 0-53 или 53-0.

Когда я бегу агрегацию на 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} } 
]) 

ответ

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}} 
]); 

Будьте осторожны, недели без каких-либо данных не будет отображаться на результатах.

Смежные вопросы