【问题标题】:How can I get the lowest values in a MongoDB collection?如何获得 MongoDB 集合中的最低值?
【发布时间】:2016-09-26 21:10:25
【问题描述】:

我有一个名为 product 的 MongoDB 集合,其中包含如下文档。

{
    "product" : "Milk",
    "barcode" : 12345,
    "price" : 100,
    "store" : "BestBuy"
},
{
    "product" : "Milk",
    "barcode" : 12345,
    "price" : 100,
    "store" : "WalMart"
},
{
    "product" : "Milk",
    "barcode" : 12345,
    "price" : 130,
    "store" : "Target"
},
{
    "product" : "Milk",
    "barcode" : 12345,
    "price" : 500,
    "store" : "Game"
}

我希望查询集合并仅返回价格最低的文档,例如

{ 
    product: "Milk",
    barcode: 12345, 
    price: 100, 
    store: "BestBuy"
}
{ 
    product: "Milk",
    barcode: 12345, 
    price: 100,
    store: "WalMart"
}

但是当我运行我的聚合查询时:

db.test.aggregate([{$match:{barcode:1234}},{$group: {_id:"$name", price:  {$min:"$price"} } }])

它只返回一个文档。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您需要通过“价格”$group您的文件。从那里,你$sort它们按“_id”升序排列,并使用$limit返回第一个文档,它只是具有最小值的文档。

    db.products.aggregate([ 
        { "$group": { 
            "_id": "$price", 
            "docs": { "$push": "$$ROOT" } 
        }},
        { "$sort": { "_id": 1 } }, 
        { "$limit": 1 } 
    ])
    

    产生类似的东西:

    {
        "_id" : 100,
        "docs" : [
            {
                "_id" : ObjectId("574a161b17569e552e35edb5"),
                "product" : "Milk",
                "barcode" : 12345,
                "price" : 100,
                "store" : "BestBuy"
            },
            {
                "_id" : ObjectId("574a161b17569e552e35edb6"),
                "product" : "Milk",
                "barcode" : 12345,
                "price" : 100,
                "store" : "WalMart"
            }
        ]
    }
    

    【讨论】:

    • 非常感谢,它解决了我的困境。质疑 $$Root 的目的是什么?
    • $$ROOT 返回整个文档。当您需要在结果集中提供所有字段时很有用。
    • @logic 我同意你的看法。但是您始终可以$push 仅使用您想要的字段,例如使用$push: { "price": "$price" } 说“价格”@
    猜你喜欢
    • 2021-11-04
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多