Команда 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);
Пример: Подготовка всех героев к бою, используя функцию для получения их оружия.
r.table("marvel").merge(
hero -> r.hashMap("weapons", r.table("weapons").get(hero.g("weapon_id")))
).run(conn);
Пример: Использование merge для объединения каждой публикации блога с её комментариями.
Обратите внимание, что последовательность, объединяемая (в данном примере, комментарии), должна быть преобразована из выбора в массив. Без coerceTo операция вызовет ошибку («Ожидаемый тип DATUM, но найден SELECTION»).
r.table("posts").merge(
post -> r.hashMap("comments", r.table("comments").getAll(post.g("id"))
.optArg("index", "post_id").coerceTo("array"))
).run(conn);
Пример: merge может использоваться рекурсивно для изменения вложенных объектов внутри объектов.
r.expr(r.hashMap("weapons", r.hashMap("spectacular graviton beam",
r.hashMap("dmg", 10).with("cooldown", 20))))
.merge(r.hashMap("weapons", r.hashMap("spectacular graviton beam",
r.hashMap("dmg", 10))))
.run(conn);
Пример: Для замены вложенного объекта другим объектом можно использовать термин literal.
r.expr(r.hashMap("weapons", r.hashMap("spectacular graviton beam",
r.hashMap("dmg", 10).with("cooldown", 20))))
.merge(r.hashMap("weapons", r.literal(r.hashMap("repulsor rays",
r.hashMap("dmg", 3).with("cooldown", 0)))))
.run(conn);
Пример: literal также может использоваться для удаления ключей из объекта.
r.expr(r.hashMap("weapons", r.hashMap("spectacular graviton beam",
r.hashMap("dmg", 10).with("cooldown", 20))))
.merge(r.hashMap("weapons", r.hashMap("spectacular graviton beam",
r.literal())))
.run(conn);
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/java/merge/