2013-02-07 51 views
12

我正在使用猫鼬在nodejs + mongodb项目上工作。现在我遇到了一个我不知道答案的问题。 我正在使用聚合框架来获得分组结果。分组是在不包括时间数据字段的日期完成的,如“2013 02 06”。代码如下所示:按猫鼬聚合框架中的日期排序

MyModel.aggregate([ 
      {$match: {$and: [{created_date: {$gte: start_date}}, {created_date: {$lte: end_date}}]}}, 
      {$group: { 
       _id: { 
        year: {$year: "$created_at"}, 
        month: {$month: "$created_at"}, 
        day: {$dayOfMonth: "$created_at"} 
       }, 
       count: {$sum: 1} 
      }}, 
      {$project: { 
       date: { 
         year: "$_id.year", 
         month:"$_id.month", 
         day:"$_id.day" 
       }, 
       count: 1, 
       _id: 0 
      }} 
     ], callback); 

分组结果是完美的,只是它们没有排序。下面是输出的一个例子:

[ 
    { 
     count: 1, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 7 
     } 
    }, 
    { 
     count: 1906, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 4 
     } 
    }, 
    { 
     count: 1580, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 5 
     } 
    }, 
    { 
     count: 640, 
     date: { 
      year: 2013, 
      month: 2, 
      day: 6 
     } 
    } 
] 

我知道排序是通过将完成这件事:{$sort: val}。但是现在我不确定val应该是什么,所以结果将按日期排序,因为我的分组键是构成日期的3个值的对象。有谁知道这可以做到吗?

编辑 有tryed这一点,它的工作:)

{$sort: {"date.year":1, "date.month":1, "date.day":1}}

回答

9

看来,这个问题有一个非常简单的答案:)只需要通过这样的多nesteed列进行排序:

{$sort: {"date.year":1, "date.month":1, "date.day":1}} 
+0

我认为你也可以做'{$ sort:{“date”:1}} – knowbody

5

我被困在相同的问题,谢谢你的回答。 但我发现,你可以用更少的代码

MyModel.aggregate([ 
      {$match: {$and: [{created_date: {$gte: start_date}}, {created_date: {$lte: end_date}}]}}, 
      {$group: { 
       _id: { 
        year: {$year: "$created_at"}, 
        month: {$month: "$created_at"}, 
        day: {$dayOfMonth: "$created_at"} 
       }, 
       count: {$sum: 1} 
      }}, 
      {$project: { 
       date: "$_id", // so this is the shorter way 
       count: 1, 
       _id: 0 
      }}, 
      {$sort: {"date": 1} } // and this will sort based on your date 
     ], callback); 
0

这,如果你只按日期排序,如果你有其他columsn进行排序工作得到同样的结果。 YOu需要扩大_id

+0

修正组只有日期 –

+0

您应该更正您的答案与您的更正,而不是把它作为一个评论。 – drneel