Команда ReQL: reduce
Синтаксис команды
sequence.reduce(function) → value r.reduce(sequence, function) → value
Описание
Получение одного значения из последовательности путём многократного применения функции редукции.
Функция редукции может вызываться для:
- двух элементов последовательности
- одного элемента последовательности и одного результата предыдущей редукции
- двух результатов предыдущих редукций
Функция редукции может вызываться для результатов двух предыдущих редукций, так как команда reduce распределена и параллелизована по фрагментам и ядрам процессора. Распространённая ошибка при использовании команды reduce заключается в предположении, что редукция выполняется слева направо. Прочитайте статью map-reduce в RethinkDB для просмотра примера.
Если последовательность пуста, сервер вернёт ReqlRuntimeError, который можно перехватить с помощью default.
Если последовательность содержит только один элемент, будет возвращён этот элемент.
Пример: Возвращение количества документов в таблице posts.
r.table("posts").map(lambda doc: 1)
.reduce(lambda left, right: left+right)
.default(0).run(conn)
Более короткий способ выполнения этого запроса — использование команды count.
Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвращение общего количества комментариев для всех записей.
r.table("posts").map(lambda doc:
doc["comments"].count()
).reduce(lambda left, right:
left+right
).default(0).run(conn)
Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвращение максимального количества комментариев на запись.
r.table("posts").map(lambda doc:
doc["comments"].count()
).reduce(lambda 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/python/reduce/