Spec-Zone.ru › RethinkDB python

Команда ReQL: concat_map

Синтаксис команды

stream.concat_map(function) → stream
array.concat_map(function) → array

Описание

Объединяет один или несколько элементов в одну последовательность с помощью функции отображения.

concat_map работает аналогично map, применяя заданную функцию к каждому элементу в последовательности, но всегда возвращает одну последовательность. Если функция отображения возвращает последовательность, map создаст последовательность последовательностей:

r.expr([1, 2, 3]).map(lambda x: [x, x.mul(2)]).run(conn)

Результат:

[[1, 2], [2, 4], [3, 6]]

В то время как concat_map с той же функцией отображения объединила бы эти последовательности в одну:

r.expr([1, 2, 3]).concat_map(lambda x: [x, x.mul(2)]).run(conn)

Результат:

[1, 2, 2, 4, 3, 6]

Возвращаемое значение, массив или поток, будет иметь тот же тип, что и входные данные.

Пример: Построить последовательность всех монстров, побеждённых героями Marvel. Поле “defeatedMonsters” — это массив из одного или нескольких имён монстров.

r.table('marvel').concat_map(lambda hero: hero['defeatedMonsters']).run(conn)

Пример: Симулировать eq_join с помощью concat_map. (Так внутренне реализуются объединения ReQL.)

r.table('posts').concat_map(
    lambda post: r.table('comments').get_all(
        post['id'], index='post_id'
    ).map(
        lambda comment: { 'left': post, 'right': comment}
    )
).run(conn)

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

  • map
  • reduce

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/concat_map/

Spec-Zone.ru

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