2016-12-26 24 views
1

我有一個集合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已陣列命名菜單。並且每個菜單(數組元素)都有代碼。菜單的'代碼'在每個菜單中都是獨一無二的。我想獲得菜單代碼的最大值(在這種情況下,)。我怎樣才能做到這一點?

+0

[MongoDB中如何從收藏最大值(http://stackoverflow.com/questions/32076382/mongodb-how-to-get-max-value-from-collections) –

+0

的可能的複製@ SmitaAhinave這不是一個有效的副本。 Op特別提到他們在MongoDB 3.2上 – styvane

回答

3

如果你想從所有菜單代碼中找到的代碼最大值則可能查詢將如下:

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

點擊下面關於不同運營商的詳細信息的鏈接:

$unwind$group$project

+0

您對@ ShaishabRoy現在已被刪除的答案的評論是錯誤的。你並不總是需要把你的管道放在一個數組中。還要注意,OP使用的是MongoDB 3.2,這意味着你的答案只有*事實上*正確。 – styvane

-2

嘗試用聚合:

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

無需任何開卷的,如果你需要找到唯一的最大值。

+1

讓我知道在這個投票中有什麼錯誤。 – kittu

0

您不需要在這裏使用$unwind聚合管道運算符,因爲從MongoDB 3.2開始,有些accumulator expressions是可用的在$project階段。

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

響應以前的現在刪除的註釋,你不需要把你的管道放在一個數組中,所以下面的查詢也可以工作。

db.collection.aggregate(
    {"$project": {"maxPerDoc": {"$max": "$menus.code"}}}, 
    {"$group": {"_id": null, "maxValue": {"$max": "$maxPerDoc"}}} 
) 
相關問題