Mongo $ sort的逆转顺序无法逆转顺序

时间:2015-07-02 16:33:27

标签: mongodb mongodb-query aggregation-framework

我有一个管道,类似这样:

db.entrycodes.aggregate(
  {
    '$match' : {
      usedAt:{
        $exists: true
      }
    }
  },
  {
    $project: {
      usedAt: true,
      dayOfMonth: {
        '$dayOfMonth': '$usedAt'
      },
      month: {
        '$month': '$usedAt'
      },
      year: {
        '$year': '$usedAt'
      }
    }
  },
  {
    $group: {
      _id: {
        dayOfMonth: '$dayOfMonth',
        month: '$month',
        year: '$year'
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $sort: {
      year:1,
      month:1,
      dayOfMonth: 1
    }
  }
)

最后一个运算符$对年月和dayOnMonth字段进行排序。问题是每次都会对数据进行反向排序。如果我像这样重写查询的最后一部分:

  {
    $sort: {
      year: -1,
      month: -1,
      dayOfMonth: -1
    }
  }

数据保持反向排序,这似乎与documentation相反。

这是Mongo中的一个错误,还是我错过了一些明显的错误?

mongod版本:2.6.9

1 个答案:

答案 0 :(得分:1)

您的$sort阶段错误,您需要使用所谓的dot notation

{
    $sort: {
        "_id.year" : -1,
        "_id.month" : -1,
        "_id.dayOfMonth": -1
    }
}