如何计算猫鼬的平均值?

时间:2019-11-22 10:10:11

标签: mongodb mongoose

我的架构如下

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 } ]。我该怎么做才能计算出我的平均得分和努力?

1 个答案:

答案 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将遍历所有剩余文档,而无需在组阶段再次指定过滤器。