Команда 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.add(right)
).default_(0).run(conn);
Более короткий способ выполнения этого запроса — использование count.
Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвращает количество комментариев для всех записей.
r.table("posts").map(doc -> doc.g("comments").count()).reduce(
(left, right) -> left.add(right)
).default_(0).run(conn);
Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвращает максимальное количество комментариев на запись.
r.table("posts").map(doc -> doc.g("comments").count()).reduce(
(left, right) -> r.branch(left.gt(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/java/reduce/