Neo4j / Cypher删除节点和子节点的关系

时间:2014-12-26 04:45:31

标签: neo4j cypher

我想删除带有子节点(65,66,67)的节点(64)以及此图中的关系: Graph image

start n=node(64)
match (e)-[r]->(n)
match (n)-[r2*]->(e2)
delete r
foreach (rel in r2| delete rel)
DELETE n, e2

获取例外:

javax.transaction.HeuristicRollbackException: Failed to commit transaction Transaction(1336, owner:"qtp1613738960-605")[STATUS_NO_TRANSACTION,Resources=1], transaction rolled back ---> Node record Node[66,used=false,rel=141,prop=-1,labels=Inline(0x0:[]),light] still has relationships

如何更改查询以进行修复?

1 个答案:

答案 0 :(得分:3)

我不是密码专家,但您只能删除没有关系的节点,并且您的异常明确指出节点66仍然具有关系。问题是,你不会在65,66,67上删除传入的关系(来自左边的关系)。

我会尝试这样的事情:

START n=node(64) /*Select start node*/
MATCH ()-[r1]->(n) /*Select all incoming relationships for start node*/
MATCH (n)-[*]->(o) /*Select "outgoing" nodes at any depth*/
MATCH ()-[r2]->(o) /*Select all incoming relationships for "o", ie node 65,66,67*/
DELETE r1,r2,n,o

顺便说一下,如果您只想删除一组节点/关系,则不需要使用foreach。一个简单的delete就可以了。