【发布时间】:2015-12-06 14:42:57
【问题描述】:
我有以下集合,每个文档中都有 c 数组
{
{
id: 1,
k: 2.2,
type: "dog",
c: [ {parentId:1, p:2.2}, {parentId:1, p:1.4} ]
},
{
id: 2,
k: 4.3,
type:"cat",
c: [ {parentId:2, p:5.2}, {parentId:2, p:4.5} ]
}
}
c 中每个子文档中的parentId 是包含文档的 ID。
我想按type 对所有文档进行分组,并且在每个组中知道k 的总和以及该组所有数组中所有p 的总和。
目前我在小组赛阶段对k 求和,但在应用程序的结果数组中对p 求和。我想对 DB 中的p 求和!
这是我目前所做的:
db.myCol.aggregate([
{
$group: {
_id: { type: '$type'},
k: {$sum: '$k'}, // sum k values, very easy!
// p: {$sum: '$c.0.p'} <==== Does not work, too
c: {$addToSet: '$c'} // add to each group all c arrays of group's members
}
}
], function(err, res) {
// go over c-arrays and sum p values
var accP = 0; // accumulator for p values
for ( var i=0; i<res.length; i++ ) {
var c = res[i].c;
for (var j=0;j<c.length; j++) {
var c2 = c[j];
for ( var k=0; k<c2.length; k++) { // finally got to objects c array
accP += c2[k].p;
}
}
res[i].c = accP; // replace array with accumulated p value
}
});
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework