Как получить среднее значение, используя агрегацию в Mongoose? - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть схема 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.Есть идеи, как этого добиться в Mongoose?

1 Ответ

0 голосов
/ 01 декабря 2018

Вы можете использовать ниже агрегации

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" }
      }}
    ]
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...