使用$max和$match的Mongodb

zujrkrfu  于 2022-12-26  发布在  Go
关注(0)|答案(1)|浏览(121)

我需要在分组后的第二阶段获得字段中具有最大值的文档(或多个文档)。如果我只需要一个,我可以使用'limit(1)',但可能会有许多文档并列在第一位。
我需要这样的东西:

db.sales.aggregate(
  [
    // First Stage
    {
      $group :
        {
          _id : "$item",
          totalSaleAmount: { $sum: { $multiply: [ "$price", "$quantity" ] } }
        }
     },
     // Second Stage
     {
       $match: { "totalSaleAmount": { $max: $totalSaleAmount } }
     }
   ]
 )

这不起作用,因为$match不允许使用$max,除非它包含在表达式中。我不知道如何完成这个。
你能帮帮我吗?

x0fgdtte

x0fgdtte1#

质询

  • 在MongoDB 5+中,我们可以使用$setWindowFields
  • 我们可以例如按totalSaleAmount的降序排序
  • $denseRank添加一个额外的字段以保留订单号,如果字段值相同,则dense-rank将给予相同的排名($rank不执行此操作)

Playmongo

aggregate(
[{"$setWindowFields": 
   {"output": {"dense-rank": {"$denseRank": {}}},
    "sortBy": {"totalSaleAmount": -1}}},
 {"$match": {"$expr": {"$eq": ["$dense-rank", 1]}}},
 {"$unset": ["denser-rank"]}])

相关问题