获取每个组的字段最小值的文档

red*_*med 1 mongodb aggregation-framework

我有一个包含两个文档的集合

{
    "_id" : ObjectId("5784def78c669ee061519aaf"),
    "name" : "nithin",
    "sal" : 2000.0,
    "age" : 20.0
},
{
    "_id" : ObjectId("5784def78c669ee061519ab0"),
    "name" : "nithin",
    "sal" : 20.0,
    "age" : 2000.0
}
Run Code Online (Sandbox Code Playgroud)

我想找到给定名字和相应年龄的最小萨尔

在这种情况下,最小 Sal 为 20,相应的年龄为 2000

运行我的查询如下:

db.test.aggregate([{
"$group":{"_id":"$name" ,"minSalary" :{"$min":"$sal"} , "ages":{"$addToSet":{"ageval":"$age","salval":"$sal"}}}}
,{"$project": {
         "_id":0,
          "sal":"$minSalary",
         "ages":  "$ages"
      }
  },
  {
   "$unwind":"$ages"   
   }
   ,
   {
    **"$match":{ "ages.salval":**20** }**  
    }
]
)
Run Code Online (Sandbox Code Playgroud)

但问题是我希望 $match 直接应用于 minSalary 而不是将过滤器值硬编码为 20 。请帮忙

sty*_*ane 5

只需$sort按“name”和“sal”升序排列您的文档,然后$group按“name”并$first使用$$ROOT系统变量返回文档。

db.test.aggregate(
    [ 
        { "$sort": { "name": 1, "sal": 1 } }, 
        { "$group": { 
            "_id": "$name", 
            "matched_doc": { "$first": "$$ROOT" } 
        }} 
    ]
)
Run Code Online (Sandbox Code Playgroud)