【问题标题】:MongoDB utilizing an aggregate average resultMongoDB 利用聚合平均结果
【发布时间】:2016-06-25 04:42:16
【问题描述】:

我有一组如下所示的文档:

var schema = new Schema({
name: {type: String, required: true},
gradeLevels: {type: String},
subject: {type: String},
standard: {type: String},
description: {type: String},
price: {type: String},
numberOfInternalReviews: {type: Number},
reviews: [{
    content: {type: String},
    rating: {type: Number},
    user: {type: Schema.Types.ObjectId, ref: 'User'},
    userFirstName: {type: String},
    softDelete: {type : Boolean}
}],
averageUserRating: {type: Number}
});

我让他们创建了一个汇总公式,用于计算每条评论的平均评分,如下所示:

db.applications.aggregate([
      { $unwind: "$reviews" }, 
      { $group: { _id: "$_id", reviews: { $push: "$reviews" },                                       
                 averageUserRating: { $avg: "$reviews.rating" } } }, 
      { $project: { _id: 0, _id: "$_id", reviews: 1, averageUserRating: 1 } }]);

这确实会根据需要在控制台中生成正确的平均结果。

我需要做的是将结果推送到原始对象的 averageUserRating 字段中。

当我查看应用程序文档时,averageUserRating 仍然返回 null。

我怎样才能做到这一点?

【问题讨论】:

  • 你在后台用什么?
  • 我在后端使用node.js、express和mongoose

标签: mongodb mongoose mongodb-query


【解决方案1】:

也许它是一个 inb 类型的项目,所以:改变这个:

{ $project: { _id: 0, _id: "$_id", reviews: 1, averageUserRating: 1 } }]);

到:

{ $project: { _id: "$_id", reviews: 1, averageUserRating: 1 } }]);

【讨论】:

  • 谢谢,但是,公式本身不是问题,我不认为。该公式正确地产生了评论评级的平均值。但是,我不确定如何在 express 或 mongoose 中使用此公式来抓取并保存应用程序对象中的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 2021-04-03
  • 2015-11-20
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多