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

#neo4j #cypher

#neo4j #cypher

Вопрос:

Я хочу скопировать узел со всеми его свойствами и отношениями с другими узлами. Я использую 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 . Есть ли способ сделать это, не зная типов отношений?

Ответ №1:

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

В вашем случае ваш запрос станет:

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

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

Комментарии:

1. Большое спасибо, что сработало для меня, хотя мне пришлось использовать ваш запрос с yield и return точно так же, как документ.