【问题标题】:MongoDB - Get highest value of childMongoDB - 获取孩子的最高价值
【发布时间】:2015-09-06 14:21:04
【问题描述】:

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

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

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

如何获得键“数字”的最大值?

【问题讨论】:

标签: mongodb


【解决方案1】:

max() 在 SQL for Mongo 中无法正常工作。 这可能会在未来的版本中改变,但截至目前, max,min 主要在内部与索引键一起使用 分片。

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

不幸的是,目前获得最大值的唯一方法是对 收集该值的描述并取第一个。

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

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

【讨论】:

    【解决方案2】:

    要获得键“数字”的最大值,您可以在此处使用两种方法。您可以使用 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)
    

    【讨论】:

    • @XLordalX 是的。你可以在这里看到 AsyaKamsky 的回答:stackoverflow.com/a/22122161/3136474
    • 感谢@DineiA.Rockenbach 的参考,很好的答案和一些很好的解释。
    【解决方案3】:

    使用点表示法:

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

    【讨论】:

    • 你也应该这样做.first(),否则你只会得到一个光标。
    猜你喜欢
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多