我的架构如下
point: { type: Number, default: 0 },
effort: { type: Number, default: 0 },
note: { type: String },
dateRated: {type: Date},
createDate: {type:Date},
dateInfoId: {type: String}
我正在尝试通过传递某些_id
来计算平均得分和工作量
我的代码看起来像
frequencies = ["mongo object id"];
Frequency.aggregate([{
$project: {
_id: {
$in: ['$_id', frequencies]
},
point: {
$ne: ['$point', 0]
}
}
}, {
$group: {
_id: {
$in: ['$_id', frequencies]
},
average: {
$avg: "$point"
},
effort: {
$avg: "$effort"
}
}
}], (err, result) => {});
但是它总是返回[ { _id: false, average: null, effort: null } ]
。我该怎么做才能计算出我的平均得分和努力?
答案 0 :(得分:1)
必须是这样的:
<ul>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
这里Frequency.aggregate([{
$match: {
_id: {
$in: frequencies
}, point: { $ne: 0 }
}
}, {
$group: {
_id: null,
average: {
$avg: "$point"
},
effort: {
$avg: "$effort"
}
}
}])
仅保留与传递的$match
匹配的文档,以及frequencies
所在的文档,那么您毕竟需要遍历所有文档以获取所需两个字段的平均值,因此point != 0
可以做到这一点,其中$group
或_id: null
将遍历所有剩余文档,而无需在组阶段再次指定过滤器。