如何使用Mongoose中的聚合获取平均值?

时间:2018-12-01 12:32:53

标签: mongodb mongoose mongodb-query aggregation-framework

我有一个Mongoose模式,其中一个属性定义如下:

// Partially removed for brevity.
const recommendationsSchema = new mongoose.Schema({
  ratings: [{ category: String, rating: Number }],
}, {
  timestamps: true
});

现在,我想获取集合中的条目总数,以及评分的平均值。但是,我只想对category字段等于total的收视率求平均值。类似于{ category: 'total' }

我试图做这样的事情,但似乎不起作用:

[
    {
        $count: "total_count",
        $group: {
            avg: { $avg: $ratings.rating }
        }
    }
]

count字段似乎返回集合中的所有条目,这是我想要的,这是很好的。但是,如何获得{ category: 'total' }的平均评分?因此,我只想返回两个字段total_countaverage。有什么想法如何在猫鼬中实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总

db.collection.aggregate([
  { "$facet": {
    "totalCount": [{ "$count": "count" }],
    "averagteRating": [
      { "$match": { "ratings.category": "total" } },
      { "$unwind": "$ratings" },
      { "$match": { "ratings.category": "total" } },
      { "$group": {
        "_id": null,
        "averageRating": { "$avg": "$ratings.rating" }
      }}
    ]
  }}
])