【问题标题】:Aggregation Query on MongoDBMongoDB 上的聚合查询
【发布时间】:2017-04-04 17:40:00
【问题描述】:

我正在尝试对 MongoDB 数据库进行聚合查询,该数据库包含不同品牌的摩托车和每种摩托车类型的列表。我的第一个查询,获得所有本田的平均价格是有效的

db.bikes.aggregate([
    { $match: { Make: 'Honda' } },
    {
        $group: {
            _id: '$Type',
            avgcost: { $avg: '$Price' }
        }
    },
    {
        $group: {
            _id: '$_id.Type',
            maxavg: { $max: '$avgprice' } 
        }
    }
])

给予

{ "_id" : "VFR700", "avgprice" : 3765.23 }
{ "_id" : "Fireblade", "avgprice" : 4816.27 }
{ "_id" : "CB1000", "avgprice" : 3993.26 }
{ "_id" : "Goldwing", "avgprice" : 4193.22 }

然后我尝试进行另一个查询,以获取本田自行车的最高平均价格(即 Fireblade,“avgprice”:48​​16)。

我正在使用以下查询:

db.bikes.aggregate([
    { $match: { Make: 'Honda' } },
    {
        $group: {
            _id: '$Type',
            avgcost: { $avg: '$Price' }
        }
    },
    {
        $group: {
            _id: '$_id.Type',
            maxavg: { $max: '$avgprice' }
        }
    }
])

但是我得到了

{ "_id" : null, "maxavg" : 4816.27 }

我有什么想法可以按我的意愿列出它,即里面也有类型名称吗?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    只需按avgprice 排序,并限制为一个文档。

    [
    { $match: { Make: 'Honda' } },
    {
        $group: {
            _id: '$Type',
            avgcost: { $avg: '$Price' }
        }
    },
    {$sort: {avgcost: -1}},
    {$limit: 1}
    
    ]
    

    【讨论】:

    • 出色的工作非常感谢我花了很长时间试图让额外的团队工作! :)
    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多