【发布时间】:2021-04-01 11:32:11
【问题描述】:
我有一个用户和一个评级集合。评分集合有ratedBy、ratedTo 和分数。
现在我想根据某些标准找到所有用户,并获得他们的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})分别找到用户并循环访问他们并使用上面的代码来查找他们的评分。或者解决方案是进行查找并加入用户和评分,然后聚合它们。
【问题讨论】:
标签: mongodb mongoose aggregation mongoose-populate