【发布时间】:2019-11-07 03:35:18
【问题描述】:
有点挣扎于 mongodb 查询。我的 mongo 数据库具有以下结构:
name: String
test: String
competences: [{name: String, code: String, value: Float}]
subcompetences: [{name: String, code: String, value: Float}]
我的查询如下所示:
async function getAggregatedDataForCompetences(filter, category) {
return await getCollection('competences').aggregate([
{$match: { $or: filter }},
{$unwind: "$competences" },
{$group: {
_id: "$_id",
code: { $first: "$competences.code" },
name: { $first: "$competences.name"},
avgValue: { $avg: "$competences.value" },
subcompetences: { $first: "$subcompetences"},
}
},
{$unwind: "$subcompetences" },
{$group: {
_id: "$subcompetences.code",
code: { $first: "$subcompetences.code" },
name: { $first: "$subcompetences.name"},
avgValue: { $avg: "$subcompetences.value" },
}}
]).toArray();
}
我想要做的是展开所有元素的第一个(能力)数组,将它们分组并计算每个项目的平均值。对以下对象的子能力数组重复相同的过程。结果,我只得到最后一个子能力数组的平均值。你知道我怎样才能达到以下结果:
{
competences: [{name: String, code: String, avgValue: Float}],
subcompetences: [{name: String, code: String, avgValue: Float}]
}
【问题讨论】:
-
为什么
competencies被$_id分组,而subcompetencies在两者中都被``$code? Typo? I think you want to group by$code` 分组,不是吗?
标签: javascript mongodb