ВЫБЕРИТЕ среднюю (оценку) ОТ рейтингов ГДЕ sid = 1 в MongoDB - PullRequest
0 голосов
/ 04 мая 2018

Как реализовать эквивалент этой команды SQL в MongoDB?

SELECT avg(rate) FROM ratings WHERE sid=1

Нет необходимости группировать.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Чтобы решить эту проблему, используйте $avg в элементе конвейера агрегации $group. Основной трубопроводный поток:

  • совпадение с sid=1 (ваше предложение WHERE)
  • сгруппировать по sid (на данный момент есть только один sid для группировки, потому что остальные отфильтрованы по совпадению), и сгенерировать среднее значение в содержимом группы

Ваш конвейер будет выглядеть примерно так:

db.rates.aggregate(
 [
   { $match: {"sid":1}}, 
   { $group: { _id: "$sid", rateAvg: {$avg:  "$rate" } }}
 ])
0 голосов
/ 04 мая 2018

Да, есть инфраструктура aggregation в mongodb, где вы можете создать конвейер этапов, которые вы хотите запросить.

db.collection.aggregate([

    {
        $match: {
            "sid": 1
        }
    },
    {
        $project: avg(rate): {
            $avg: "$rate"
        }
    }

])

Как вы знаете, в sql сначала применяется запрос where, поэтому сначала мы разместили конвейер $match. $match в mongodb как-то эквивалентно where i SQL, и есть $avg в mongodb, который работает так же как AVG в SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...