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



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

{
    "_id" : ObjectId("5784def78c669ee061519aaf"),
    "name" : "nithin",
    "sal" : 2000.0,
    "age" : 20.0
},
{
    "_id" : ObjectId("5784def78c669ee061519ab0"),
    "name" : "nithin",
    "sal" : 20.0,
    "age" : 2000.0
}

我想找到给定姓名和相应年龄的最低年龄

在这种情况下,最低年龄为

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** }**  
    }
]
)

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

只需按

升序按"name"和"sal"$sort文档,然后按"name"$group并使用$$ROOT系统变量返回$first文档。

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

我发现你的问题有点不清楚,但这里有两种情况的尝试。

  1. 将年龄和姓名分组在一起,然后获得最低工资。返回同名同年龄组人员的最低工资

db.getCollection('sal').aggregate([ { $group : { _id : { age : "$age", name : "$name" }, minSal : { $min : "$sal" } } } ])

  1. 仅按年龄组分组,获得每个年龄组的最低工资

db.getCollection('sal').aggregate([ { $group : { _id : "$age", minSal : { $min : "$sal"} } } ])

相关内容

  • 没有找到相关文章

最新更新