Spec-Zone.ru › RethinkDB python

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

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

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

Spec-Zone.ru

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