запрос на копирование узла с отношениями в neo4j без процедуры клонирования

Я хочу скопировать узел со всеми его свойствами и связями с другими узлами. Я использую Neo4j версии 3.4.7, поэтому я не могу использовать процедуру клонирования. У моего узла могут быть разные типы отношений, и я хочу скопировать их все. Я хотел использовать этот запрос

match (map:student {name:'test'})  create (copy:student) set copy=map with copy,map match (map)-[r1]->(n) with collect(r1) as rels,map,copy,n foreach( rel in rels | create (copy)-[r2:type(rel)]->(n) set r2+=rel) return copy,n

но я получаю недопустимую синтаксическую ошибку при использовании type (rel) в foreach. Есть ли способ сделать это, не зная типов отношений?


person pouyeh    schedule 21.12.2020    source источник


Ответы (1)


Самый простой способ - установить библиотеку APOC и вызвать процедуру apoc.refactor.cloneNodesWithRelationships, как задокументировано здесь.

В вашем случае ваш запрос будет выглядеть следующим образом:

MATCH (map:student {name:'test'})
CALL apoc.refactor.cloneNodesWithRelationships([map])

Примечание: метки узлов обычно начинаются с заглавной буквы (Student чаще, чем student в наборах данных Neo4j).

person fbiville    schedule 21.12.2020
comment
Большое спасибо, что сработало для меня, хотя мне пришлось использовать ваш запрос с yield и return, как и в документе. - person pouyeh; 22.12.2020