通过聚合其他集合来填充字段

问题描述

我有一个用户和一个评分集合。 Ratings 集合有 ratedByratedTo 和 score。 现在我想根据某些条件查找所有用户并获取他们的 ratingAvg。因此,结果将类似于以下内容:

[
{_id: 44s5dsdde4e4e55e,name:"bob",email: "bob@gmail.com",ratingAvg: 3,...},{_id: 3as5dsdde4e4e55e,name:"alice",email: "alice@gmail.com",ratingAvg: 4,...}
]

我对数据库非常陌生,尤其是 MongoDB。我可以通过执行此操作找到特定用户的 ratingAvg

Ratings.aggregate([
            {
                $match: {ratedTo: Mongoose.Types.ObjectId(userId)}
            },{
                $group: {
                    _id: "$ratedTo",avgRating: { $avg : "$score" }
                }
            }
        ]);

但是我需要做的是让用户使用他们的字段和 ratingAvg 像上面那样计算。我能想到的是通过Users.find({field: criteria})分别找到用户并循环他们并使用上面的代码来找到他们的评分。或者解决方案是进行查找并加入用户和评分,然后汇总它们。

解决方法

一种可能的方法是使用聚合:

Playground

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...