我从流星反应聚合包中获得了这个聚合发布函数。我正在尝试聚合Matches数组中的所有值。不知道我需要在函数中指定聚合的数组(读取文档我不确定在哪里)。我也尝试了一些不成功的事情。
发布聚合
Meteor.publish('reportTotals', function() {
ReactiveAggregate(this, Players, [{
//grouping the items
$group: {
'_id': this.userId,
'score': {
$sum: '$score'
},
'assists': {
$sum: '$assists'
}
}
}, {
$project: {
score: '$score',
assists: '$assists'
}
}], {
clientCollection: 'playerReport'
});
});
这是一个对象的例子,其中可能有多个匹配,我需要编译分数,助攻等。
{ "_id": "WhrZCTtj9HHtDB3rs",
"name": "Test player",
"team": "TThqi8Wu6YJh6mapC",
"practicesAttended": 3,
"createdBy": "RKtpy532sgzbBpP4J",
"createdAt": "2016-05-29T16:26:47.837Z",
"notes": "Small test notes",
"itemImage": "Lfb27GnWXDRxfkajL",
"Matches": [
{
"match": "2016-05-21",
"score": 3,
"shotsTaken": 4,
"assists": 0,
"duelsWon": 4,
"duelsLost": 2,
"tacklesWon": 0,
"tacklesLost": 0,
"blocks": 51
}
]
}
答案 0 :(得分:1)
使用 $unwind
运算符,它会将嵌入式数组展开或展平为多个独特元素。因此,对于每个输入文档,它输出n
个文档,其中n
是数组元素的数量,对于空数组可以为零。
注意:应用 $unwind
的字段名称应以$
为前缀(美元符号)
在上面的案例中,将 $unwind
导入 $group
。这类似于在LEFT JOIN ... GROUP BY
中使用SQL
:
Meteor.publish('reportTotals', function() {
ReactiveAggregate(this, Players, [
// unwind the Matches list
{ "$uniwnd": "$Matches" },
//grouping the items
{
"$group": {
"_id": this.userId,
"score": { "$sum": "$Matches.score" },
"assists": { "$sum": "$Matches.assists" }
}
}
], { clientCollection: 'playerReport' });
});