mongodb - 如何获得 MongoDB 集合中的最低值?

标签 mongodb mongodb-query aggregation-framework

我有一个名为 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"} } }])

它只返回一个文档。

最佳答案

您需要$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"
        }
    ]
}

关于mongodb - 如何获得 MongoDB 集合中的最低值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501925/

相关文章:

mongodb - 如何使用 Mongodb 聚合获取 Male 的值总和

mongodb - 综合平均值

mongodb - 如何获取最近三个月在mongo shell中创建的所有文档

mongodb - Mongo 按月分组使用 UNIX 毫秒时间

c# - 具有非空字段的 Mongo C# 驱动程序上的聚合不过滤

javascript - 多聚合查询 MongoDB

java - Spring MongoDB 复制集身份验证错误

mongodb安装失败运行mongod

MongoDB - $project 嵌套文档到根级别

MongoDB 获取唯一文档,需要与同一集合中的其他文档进行比较