猫鼬通过对数字进行排序

时间:2020-05-23 00:28:50

标签: mongodb mongoose

我有一个类似文件

{
  data: [{"channel":"712064846325219432","message":1019},{"channel":"712064884812021801","message":4}],
  user: '290494169783205888',
},
{
  data: [{"channel":"712064846325219432","message":2000},{"channel":"712064884812021801","message":500}],
  user: '534099893979971584',
}

那么我该如何计算data的消息并按降序对这些文档进行排序?

2 个答案:

答案 0 :(得分:1)

使用聚合管道阶段$unwind$group为每个用户计数消息,然后按消息总数进行排序。 Check the example.

db.collection.aggregate([
  {
    $unwind: {
      path: "$data"
    }
  },
  {
    $group: {
      _id: "$user",
      total_message: {
        $sum: "$data.message"
      }
    }
  },
  {
    $sort: {
      total_message: -1
    }
  }
])

结果:

[
  {
    "_id": "534099893979971584",
    "total_message": 2500
  },
  {
    "_id": "290494169783205888",
    "total_message": 1023
  }
]

答案 1 :(得分:0)

您可以使用Query.sort()

对于降序,您可以使用-1descdescending

Query.sort(message: -1)