MongoDB - 获得最高价值的孩子

时间:2015-06-20 19:04:25

标签: mongodb

我正在尝试获得子值的最高值。如果我有两个这样的文件

{
    "_id" : ObjectId("5585b8359557d21f44e1d857"),
    "test" : {
        "number" : 1,
        "number2" : 1
    }
}

{
    "_id" : ObjectId("5585b8569557d21f44e1d858"),
    "test" : {
        "number" : 2,
        "number2" : 1
    }
}

我如何获得关键“数字”的最高值?

3 个答案:

答案 0 :(得分:2)

使用点表示法:

db.testSOF.find().sort({'test.number': -1}).limit(1)

答案 1 :(得分:1)

  

max()无法按照您在SQL中为Mongo所期望的方式工作。   这可能会在未来版本中发生变化,但截至目前,   max,min主要用于内部索引键   分片。

     

请参阅http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers

     

不幸的是,现在获得最大值的唯一方法是排序   收集关于该值的desc并采取第一个。

db.collection.find("_id" => x).sort({"test.number" => -1}).limit(1).first()

引自:Getting the highest value of a column in MongoDB

答案 2 :(得分:1)

获取密钥的最高值" number"你可以在这里使用两种方法。您可以使用 aggregation framework ,其中管道看起来像这样

db.collection.aggregate([
    {
        "$group": {
            "_id": 0,
            "max_number": {
                "$max": "$test.number"
            }
        }
    }
]) 

<强>结果

/* 0 */
{
    "result" : [ 
        {
            "_id" : 0,
            "max_number" : 2
        }
    ],
    "ok" : 1
}

或者您可以使用 find() 光标,如下所示

db.collection.find().sort({"test.number": -1}).limit(1)