Команда 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.
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/reduce/