Spec-Zone.ru › RethinkDB javascript

Команда 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.

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

  • 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/javascript/reduce/

Spec-Zone.ru

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