饭店集合包含多个饭店文件,格式如下:
{
_id: ObjectId("123123123132123"),
name: 'bla bla',
...
}
评论集合包含以下形式的多个评论文档:
{
_id: ObjectId("hnkjadhf88334820dasf")
restaurant: ObjectId("123123123132123"),
user: ObjectId("ajkdjklae83"),
rate: 3,
....
}
我需要做的是根据评论的平均评分获得餐厅的评分。
我试图做的是以下事情:
restaurantSchema.statics.getSpecificRestaurant = function(_id) {
return this.aggregate([
{ $match: { _id: mongoose.Types.ObjectId(_id) } },
{
$lookup: {
from: "reviews",
localField: "_id",
foreignField: "restaurant",
as: "reviews"
}
},
{
$addFields: {
rate: { $avg: "$reviews.rate" }
}
}
]);
};
那是完美的工作!但问题是我无法在评论中填充用户。
那么在这种情况下如何填充用户?或其他任何方法来计算平均Avg?
注意:在餐厅架构内部创建了一个称为“评论”的虚拟字段,并且用户是从评论架构侧填充的,但这不适用于上面的汇总
餐厅架构:
restaurantSchema.virtual("reviews", {
ref: "Review",
localField: "_id",
foreignField: "restaurant"
});
查看模式:
reviewSchema.pre("find", function autopopulate(next) {
this.populate("user");
next();
});