我有一个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_count
和average
。有什么想法如何在猫鼬中实现这一目标吗?
答案 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" }
}}
]
}}
])