У меня есть пользователь и коллекция оценок. В коллекции рейтингов есть ratedBy
, ratedTo
и оценка.
Теперь я хочу найти всех пользователей по некоторым критериям, а также получить их ratingAvg
. Таким образом, результат будет выглядеть примерно следующим образом:
[
{_id: 44s5dsdde4e4e55e,name:"bob", email: "[email protected]", ratingAvg: 3, ...},
{_id: 3as5dsdde4e4e55e,name:"alice", email: "[email protected]", ratingAvg: 4, ...}
]
Я очень новичок в базах данных и особенно в MongoDB. Я могу найти ratingAvg
конкретного пользователя, выполнив это
Ratings.aggregate([
{
$match: {ratedTo: Mongoose.Types.ObjectId(userId)}
},
{
$group: {
_id: "$ratedTo",
avgRating: { $avg : "$score" }
}
}
]);
Но что мне нужно сделать, так это получить пользователей с их полями и вычислить ratingAvg
, как указано выше. Что я могу придумать, так это найти пользователей по отдельности с помощью Users.find({field: criteria})
, перебрать их и использовать приведенный выше код, чтобы найти их рейтинги. Или решением было бы выполнить поиск и объединить пользователей и рейтинги, а затем объединить их.
Одним из возможных способов является использование агрегации с:
$addFields
с $divide для расчета среднего