MongoDB:分组,然后检索每个分组的最大值

时间:2019-09-18 23:44:25

标签: mongodb aggregation-framework

在下面的集合中,我想按author分组,然后对于每个author,用最高的name显示条目的price

[
  { "name": "Design", "price": 499, "author": "ted" },
  { "name": "Launch", "price": 999, "author": "ted" },
  { "name": "Test",  "price": 1200, "author": "bob" },
  { "name": "Scale",  "price": 1499, "author": "bob" }
]

因此,这里我的查询应该返回LaunchScale

我尝试了如下汇总,但是我不确定以后该怎么做,只是将所有条目拉到客户端上,然后处理所有组以找到具有最高价格的条目(这听起来效率很低)。

[
  {
    "$group": {
       "_id": "$author",
       "entry": {
         "$push": {
           "price": "$price",
           "name": "$name"
         }
       }
    }
  }
]

什么是有效的方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

根据MongoDB - get documents with max attribute per group in a collection的答案

请尝试

db.collection.aggregate([
    { "$sort": {  "price": -1 } },
    { "$group": {
        "_id": "$author",
        "price": { "$first": "$price" },
        "name": { "$first" "$name" }
    }}
])