Spec-Zone.ru › RethinkDB javascript

Команда ReQL: merge

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

singleSelection.merge([object | function, object | function, ...]) → object
object.merge([object | function, object | function, ...]) → object
sequence.merge([object | function, object | function, ...]) → stream
array.merge([object | function, object | function, ...]) → array

Описание

Объединяет два или более объектов, создавая новый объект со свойствами всех исходных объектов. При конфликте имён полей предпочтение отдаётся полям в правом объекте списка аргументов. merge также принимает функцию подзапроса, возвращающую объект, который будет использоваться аналогично функции map.

Пример: Наделить Тора боевой экипировкой.

r.table('marvel').get('thor').merge(
    r.table('equipment').get('hammer'),
    r.table('equipment').get('pimento_sandwich')
).run(conn, callback)

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

r.table('marvel').merge(function (hero) {
    return { weapons: r.table('weapons').get(hero('weaponId')) };
}).run(conn, callback)

Пример: Использовать merge для объединения каждого поста с его комментариями.

Обратите внимание, что последовательность, объединяемую (в данном примере, комментарии), необходимо преобразовать из выбора в массив. Без coerceTo операция выбросит ошибку («Ожидается тип DATUM, но получен SELECTION»).

r.table('posts').merge(function (post) {
    return {
        comments: r.table('comments').getAll(post('id'),
            {index: 'postId'}).coerceTo('array')
    }
}).run(conn, callback)

Пример: Merge может использоваться рекурсивно для изменения объектов внутри объектов.

r.expr({weapons : {spectacular_graviton_beam : {dmg : 10, cooldown : 20}}}).merge(
    {weapons : {spectacular_graviton_beam : {dmg : 10}}}).run(conn, callback)

Пример: Для замены вложенного объекта другим объектом можно использовать ключевое слово literal.

r.expr({weapons : {spectacular_graviton_beam : {dmg : 10, cooldown : 20}}}).merge(
    {weapons : r.literal({repulsor_rays : {dmg : 3, cooldown : 0}})}).run(conn, callback)

Пример: Literal также может использоваться для удаления ключей из объекта.

r.expr({weapons : {spectacular_graviton_beam : {dmg : 10, cooldown : 20}}}).merge(
    {weapons : {spectacular_graviton_beam : r.literal()}}).run(conn, callback)

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

  • pluck
  • without
  • map

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

Spec-Zone.ru

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