2016-07-04 2 views
1

У меня есть дерево как структура узла в моей базе данных Neo4j. Когда я удаляю определенный узел, я хочу удалить все дочерние узлы и отношения, связанные с этим узлом. Рассмотрим структуру узла, генерируемого ниже запроса,Как удалить все дочерние узлы и отношения с помощью одного запроса в Neo4j.?

merge (p1:Person{nic:'22222v'})-[r1:R1]->(p2:Person{nic:'33333v'}) 
merge(p1)-[r2:R2]->(p3:Person{nic:'44444v'}) 
merge(p2)-[r3:R3]->(p3) 
merge (p3)-[r4:R4]->(p4:Person{nic:'55555v'}) 
merge(p4)-[r5:R5]->(p5:Person{nic:'66666v'}) 
return r1,r2,r3,r4,r5 

Если я входной узел (NIC: 44444v) он должен удалить узел (NIC: 44444v), узел (NIC: 55555v), узел (NIC: 66666v ), отношения (r2), отношения (r3), отношения (r4) и отношения (r5)

ответ

3

Вы можете использовать несколько связей глубины и удалять узлы:

MATCH (n:Person {nic:'44444v'})-[*0..]->(x) 
DETACH DELETE x 

определение 0.. глубины будет встраивать n identifie r в узлах x и, таким образом, будет обрабатывать случай, когда у человека нет дочерних узлов.

Альтернативный синтаксис oldier версии Neo4j:

MATCH (n:Person {nic:'44444v'})-[*0..]->(x) 
OPTIONAL MATCH (x)-[r]-() 
DELETE r, x 
+2

Это, вероятно, не нужно говорить, но на всякий случай ... Попробуйте использовать отношения этикетки в этом виде рекурсивной операции. В противном случае, если какой-либо из этих узлов имеет какое-то отношение, выходящее из этой древовидной структуры, к любому другому узлу вашего db, вы начнете рекурсивное удаление, которое может иметь потенциал для уничтожения хорошей порции, возможно даже всех, вашего дБ. Даже если нет никаких отношений, которые избегают этого дерева в вашем текущем дизайне, изменение в будущем db может добавить дополнительные отношения, которые еще больше усугубят катастрофу. – InverseFalcon

+1

@Christophe, Ваш запрос работает в Neo4j 2.3.0-M02. Потому что это дало мне синтаксические ошибки. – Hasitha

+0

M02 - релиз, но не уверен, и вы должны использовать стабильную версию, так как 2.3 GA была выпущена в октябре 2015 года! Каковы ваши синтаксические ошибки? –

Смежные вопросы