如何在meteorhacks中对文档进行排序:聚合输出

时间:2017-03-31 17:44:04

标签: mongodb meteor

此Meteor服务器代码尝试对文档进行分组并按属性“句点”升序对其进行排序,但它没有这样做,任何想法如何修复它? thx

let invoicePopulation = UsageCol.aggregate([
        {
          $match: {
            action: {$in: ['a', 'b', 'c']},
            userId: doc.userId
          }
        },
        {
          $group: {
            _id: {period: "$period"},
            count: {$sum: 1}
          }
        },
        {
          "$sort" : {
            "period" : 1
          }
        }
      ]);

      //output
      [{"_id":{"period":"42017"},"count":14},{"_id":{"period":"22017"},"count":1},{"_id":{"period":"32017"},"count":271}]

//needs to be 
[{"_id":{"period":"22017"},"count":1},{"_id":{"period":"32017"},"count":271},{"_id":{"period":"42017"},"count":14}]

1 个答案:

答案 0 :(得分:1)

你的$group看起来很奇怪。通常,您希望对特定字段进行分组,该字段将成为您的_id(因为该字段现在是唯一的)。

您在代码中拥有它的方式是将子文档设置为_id的值。如果这真的是你想要的,那么你的$sort应该是这个。

{
  $sort: {
    "_id.period": 1
  }
} 

如果您不想创建_id子文档,那么您应该像这样修复$group

let invoicePopulation = UsageCol.aggregate([
  {
    $match: {
      action: {$in: ['a', 'b', 'c']},
      userId: doc.userId
    }
  },
  {
    $group: {
      _id: "$period",
      count: {$sum: 1}
    }
  },
  {
    $sort : {
      "period" : 1
    }
  }
]);