如何在$ group排序后找到最大总和

时间:2017-08-07 15:51:46

标签: mongodb mongodb-query aggregation-framework

我有以下查询:

db.pmusers.aggregate([
    {
        $unwind: '$preferableUsersIds'
    },
    {
        $group:{_id: '$preferableUsersIds', number:{$sum: 1}}
    },
    {
        $sort:{number:-1}
    },
    {
        $limit:1
    }
])

我知道这不是最佳解决方案,因为我对所有条目进行排序而不是只找到一条。

mongoDb是否支持以更有效的方式重写它?

P.S。

我知道$max但是看不出它对我有什么帮助。

这个至少不会更快起作用:

db.pmusers.aggregate([
      {
          $unwind: '$preferableUsersIds'
      },
      {
          $sortByCount: "$preferableUsersIds"
      },
      {
          $limit:1
      }
  ])

1 个答案:

答案 0 :(得分:0)

请参阅answer here

MongoDB合并聚合中的排序和限制以优化查询。如果您经常这样做以确保它是一个涵盖的查询,您也可以添加索引。

来自链接答案的文字:

  

根据MongoDB documentation

     

当$ sort紧接在$ limit之前时,优化器可以合并   $ sort的$ limit。这仅允许排序操作   随着它的进展保持前n个结果,其中n是指定的   限制,MongoDB只需要在内存中存储n个项目。