2014-12-05 56 views
0

我有以下JSON結構 -如何使用mongo獲取元素的總和?

[{ 
cName:"A", 
"vms" : [ 
    { 
     "status":"off", 
     "name":"ds0", 
     "capacity":5 
    }, 
    { 
     "name" : "ds1", 
     "status":"on", 
     "capacity":5 
    }, 
    { 
     "name" : "ds2", 
     "status":"off", 
      "capacity":5 
    }, 
    { 
     "name" : "ds3", 
     "status":"off", 
       "capacity":10 
    } 
    ], 
}, 
{ 
cName:"B", 
"vms" : [ 
    { 
     "name" : "ds4", 
     "status":"on", 
       "capacity":52 
    }, 
    { 
     "name" : "ds3", 
     "status":"off", 
     "capacity":50 
    }, 
    { 
     "name" : "ds5", 
     "status":"off", 
       "capacity":15 
    } 
    ], 
} 
] 

我的預期輸出如下 -

[{ 
"cName":"A", 
"capacity":20, 
},[{ 
"cName":"B", 
"capacity":65, 
} 
] 

我使用蒙戈聚合得到的輸出。

我能夠使用它獲得cname和容量,但無法獲得容量總和。

如何獲得使用mongo聚合的vms容量的總和?

回答

0

如果我理解正確的,你

db.f.aggregate([ 
{ 
    $unwind:"$vms" 
}, 

{ 
    $group:{ 
     _id:"$cName", 
     capacity:{$sum:"$vms.capacity"} 
    } 
}, 
{ 
    $sort:{_id:1} 
},{ 
    $project:{ 
     _id:0, 
     "cName":"$_id", 
     "capacity":1 
    } 
} 

]) 

結果:

{ 
    "result" : [ 
     { 
      "capacity" : 25, 
      "cName" : "A" 
     }, 
     { 
      "capacity" : 117, 
      "cName" : "B" 
     } 
    ], 
    "ok" : 1 
} 

我不明白,爲什麼在你的例子cName:A capacity = 20 (5+5+5+10)甚至cName:B ......也許這只是模擬

相關問題