#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 точно так же, как документ.