Хобрук: Ваш путь к мастерству в программировании

RethinkDB: как выполнить несколько операций агрегирования, выполнив только один запрос?

Для таблицы со следующими результатами (не обязательно записи с идентификаторами): [{time: 4, votes: 10}, {time: 6, votes: 3} ... ]

Как я могу получить следующий результат (или аналогичный): {average_time: 5, total_votes: 13}, выполнив только ОДИН запрос, а не два?

03.09.2014

Ответы:


1

Вы можете использовать сокращение для выполнения нескольких агрегаций. Это должно работать

r.table('data').map(function(doc) {
  return {
    total_votes: doc("votes"),
    total_time: doc("times"),
    count: 1
  }
}).reduce(function(left, right) {
  return {
    total_votes: left("total_votes").add(right("total_votes")),
    total_time: left("total_time").add(right("total_time")),
    count: left("count").add(right("count"))
  }
}).map(function(result) {
  return {
    total_votes: result("total_votes"),
    average_time: result("total_time").div(result("count"))
  }
})
03.09.2014
  • Мне кажется, или текущее использование метода reduce() несовместимо с v1.12.5? 04.09.2014
  • Насколько я знаю, на 1.12 и 1.14 должно работать одинаково. В чем проблема? Пишите мне по адресу [email protected], если хотите. 04.09.2014
  • Я вернулся к этому вопросу только сейчас. Могу я спросить ваше мнение о пути Масатоши внизу? 18.11.2014

  • 2

    попробуй это :)

    r.object(
        'average_time',
        r.table('data')('time').avg(),
        'total_votes',
        r.table('data')('votes').sum()
    )
    
    04.09.2014
  • Это подход 2n или n..? 04.09.2014
  • только 1. может сразу одновременно. попробуйте в Rethink Data Explorer Console. 04.09.2014
  • Можете ли вы предоставить аналогичное решение для сгруппированных данных? Я имею в виду среднее и сумму по каждой группе? 18.11.2014
  • Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..