MongoDB查找并返回所有最大值

Sel*_*rac 5 mongodb mongodb-query

我正在尝试获取具有最大值的文档列表。如果我知道具有最大值的文档数,我可以指定它(就像在另一个 stackoverflow 解决方案“mongodb 如何从集合中获取最大值”中的解决方案中一样),但如果我不知道该怎么做,我可以指定它不知道文档的数量是多少。

例如,使用以下文件:

{name:"a", age:10}
{name:"b", age:11}
{name:"d", age:12}
{name:"c", age:12}
Run Code Online (Sandbox Code Playgroud)

所以我知道有 2 个文档的最大年龄为 12。因此我可以编写以下查询

db.collection.find().sort({age: -1).limit(2)
Run Code Online (Sandbox Code Playgroud)

我使用limit(2)是因为我知道有 2 个文档具有最大值,但是我该如何自动化呢?我可以计算具有最大值的记录,将其存储在一个变量中并像这样使用它limit(n)吗?有没有其他方法可以做到?

pro*_*r79 5

您可以使用聚合框架来获取结果

var group = {$group:{_id:"$age", names:{$push:"$name"}, count:{$sum:1}}}
var sort = {$sort:{"_id":-1}}
var limit= {$limit:1}
db.selrac.aggregate([group, sort, limit])
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

{
    "_id" : 12.0,
    "names" : [ 
        "d", 
        "c"
    ],
    "count" : 2.0
}
Run Code Online (Sandbox Code Playgroud)

或者如果需要有完整的文档参考替换组:

var group = {$group:{_id:"$age", fullDocument:{$push:"$$ROOT"}, count:{$sum:1}}}
Run Code Online (Sandbox Code Playgroud)

输出:

{
    "_id" : 12.0,
    "fullDocument" : [ 
        {
            "_id" : ObjectId("57509a890d4ae20f6de06657"),
            "name" : "d",
            "age" : 12.0
        }, 
        {
            "_id" : ObjectId("57509a890d4ae20f6de06658"),
            "name" : "c",
            "age" : 12.0
        }
    ],
    "count" : 2.0
}
Run Code Online (Sandbox Code Playgroud)

欢迎任何意见!