Команда 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)
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/merge/