如何在嵌套文档中获得最大值?

时间:2016-12-26 07:11:08

标签: mongodb mongodb-query aggregation-framework

我在MongoDB 3.2.11中有一个集合(名为 menucategories ):

{
    "_id" : ...
    "menus" : [
        {
            "code":0
        },
        {
            "code":1
        },
        {
            "code":2
        },
        {
            "code":3
        }
    ]
},
{
    "_id" : ...
    "menus" : [
        {
            "code":4
        },
        {
            "code":5
        },
        {
            "code":6
        },
        {
            "code":7
        }
    ]
},
{
    "_id" : ...
    "menus" : [
        {
            "code":8
        },
        {
            "code":9
        },
        {
            "code":10
        },
        {
            "code":11
        }
    ]
}

每个 menucategory 都有名为菜单的数组。每个菜单(数组元素)都有代码。 ' 代码'菜单在每个菜单中都是唯一的。我想获得菜单代码的最大值(在这种情况下, 11 )。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

如果要从所有菜单代码中找到代码的最大值,则可能的查询将如下:

db.menucategories.aggregate([
  { $unwind: '$menus' },
  { $group: { _id: null, max: { $max: '$menus.code' } } },
  { $project: { max: 1, _id:0 } }
]) 

点击以下链接,了解有关不同运营商的更多信息:

$unwind$group$project

答案 1 :(得分:0)

您不需要在此处使用@NgModule({ imports: [ BrowserModule, FormsModule, AppRoutingModule, storeModule ], declarations: [ AppComponent, LoginComponent, MenuComponent ], bootstrap: [ AppComponent ] }) export class AppModule { } 聚合管道运算符,因为从MongoDB 3.2开始,$unwind阶段提供了一些accumulator expressions

$project

回复之前删除的评论,您不需要将管道放入数组中,以便以下查询也能正常运行。

db.collection.aggregate([
    {"$project": {"maxPerDoc": {"$max": "$menus.code"}}}, 
    {"$group": {"_id": null, "maxValue": {"$max": "$maxPerDoc"}}}
])

答案 2 :(得分:-2)

尝试聚合:

db.collection.aggregate({ $group : { _id: 1, max: { $max: {$max : "$menus.code"}}}});

如果您只需要找到最大值,则无需任何放松。