Spec-Zone.ru › RethinkDB ruby

Команда ReQL: reduce

Синтаксис команды

sequence.reduce(function) → value
r.reduce(sequence, function) → value

Описание

Производит одно значение из последовательности путём многократного применения функции сокращения.

Функция сокращения может вызываться для:

  • двух элементов последовательности
  • одного элемента последовательности и одного результата предыдущего сокращения
  • двух результатов предыдущих сокращений

Функция сокращения может вызываться для результатов двух предыдущих сокращений, потому что команда reduce распределена и распараллелена по фрагментам и ядрам процессора. Распространённая ошибка при использовании команды reduce заключается в предположении, что сокращение выполняется слева направо. Прочитайте статью map-reduce в RethinkDB, чтобы увидеть пример.

Если последовательность пуста, сервер произведёт ReqlRuntimeError, которую можно поймать с помощью default.
Если последовательность содержит только один элемент, будет возвращён первый элемент.

Пример: Возвращает количество документов в таблице posts.

r.table("posts").map{|doc| 1 }
    .reduce{ |left, right| left+right }
    .default(0).run(conn)

Более короткий способ выполнения этого запроса — использовать count.

Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвращает количество комментариев для всех записей.

r.table("posts").map{|doc|
    doc["comments"].count()
}.reduce{ |left, right|
    left+right
}.default(0).run(conn)

Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвращает максимальное количество комментариев на запись.

r.table("posts").map{|doc|
    doc["comments"].count()
}.reduce{ |left, right|
    r.branch(
        left > right,
        left,
        right
    )
}.default(0).run(conn)

Более короткий способ выполнения этого запроса — использовать max.

Связанные команды

  • group
  • map
  • concat_map
  • sum
  • avg
  • min
  • max

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/reduce/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API