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

Neo4j/Cypher删除具有关系的节点和子节点,neo4j,cypher,Neo4j,Cypher,我想从此图中删除包含子节点(65、66、67)的节点(64)和关系: 获取异常: javax.transaction.HeuristicRollbackException: Failed to commit transaction Transaction(1336, owner:"qtp1613738960-605")[STATUS_NO_TRANSACTION,Resources=1], transaction rolled back ---> Node record Node[66,

我想从此图中删除包含子节点(65、66、67)的节点(64)和关系:

获取异常:

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

如何更改查询以修复它?

我不是密码专家,但您只能删除没有关系的节点,并且您的异常清楚地表明节点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
就可以了。

您的节点似乎仍然有其他关系,而不仅仅是到n(传递性的),您还可能会在从n到e2的链上找到其他孤立节点
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