Команда ReQL: reduce
Синтаксис команды
sequence.reduce(function) → value r.reduce(sequence, function) → value
Описание
Создаёт одно значение из последовательности путём многократного применения функции редукции.
Функция редукции может вызываться на:
- двух элементах последовательности
- одном элементе последовательности и одном результате предыдущей редукции
- двух результатах предыдущих редукций
Функция редукции может вызываться на результатах двух предыдущих редукций, потому что команда reduce распределена и распараллелена по фрагментам и ядрам процессора. Частая ошибка при использовании команды reduce заключается в предположении, что редукция выполняется слева направо. Прочитайте статью map-reduce в RethinkDB, чтобы увидеть пример.
Если последовательность пустая, сервер вернёт ReqlRuntimeError , которое можно перехватить с помощью default.
Если в последовательности только один элемент, будет возвращён этот элемент.
Пример: Возвратить количество документов в таблице posts.
r.table("posts").map(function(doc) {
return 1;
}).reduce(function(left, right) {
return left.add(right);
}).default(0).run(conn, callback);
Более короткий способ выполнения этого запроса — использовать count.
Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвратить количество комментариев для всех постов.
r.table("posts").map(function(doc) {
return doc("comments").count();
}).reduce(function(left, right) {
return left.add(right);
}).default(0).run(conn, callback);
Пример: Предположим, что каждый post имеет поле comments, которое является массивом комментариев.
Возвратить максимальное количество комментариев на пост.
r.table("posts").map(function(doc) {
return doc("comments").count();
}).reduce(function(left, right) {
return r.branch(
left.gt(right),
left,
right
);
}).default(0).run(conn, callback);
Более короткий способ выполнения этого запроса — использовать max.
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/reduce/