如何基于其他文档计算mongoDB文档的平均评级?

时间:2019-08-04 14:49:42

标签: javascript node.js mongodb

饭店集合包含多个饭店文件,格式如下:

{
 _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();
});

0 个答案:

没有答案