Neo4j 删除具有所有传入和传出关系的节点

Neo4j 删除具有所有传入和传出关系的节点,neo4j,relationship,cypher,neo4jphp,Neo4j,Relationship,Cypher,Neo4jphp,我想删除包含所有传入和传出关系的节点 此传入和传出关系是可选的 (t:Teacher)-[:TEACHES]->(s:Student) (s:Student)-[:ATTENDS]->(c:Class) 学生节点与教师有可选关系,与班级有可选关系 我想删除具有{id:1}的学生节点 我知道如何删除以下节点和关系: MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r 但无法将其转换为特定节点。请帮忙。你很接近: match (n:Stude

我想删除包含所有传入和传出关系的节点

此传入和传出关系是可选的

(t:Teacher)-[:TEACHES]->(s:Student)
(s:Student)-[:ATTENDS]->(c:Class)
学生节点与教师有可选关系,与班级有可选关系

我想删除具有{id:1}的学生节点

我知道如何删除以下节点和关系:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
但无法将其转换为特定节点。请帮忙。

你很接近:

match (n:Student) 
where n.studentid = 2224
optional match (n)-[r]-()
delete n,r

(根据jjaderberg的评论更新)

只需在第一个匹配子句中添加区分属性即可

MATCH (s:Student {id:1})
OPTIONAL MATCH s-[r]-()
DELETE r, s
如果您所说的
id
是指内部节点id,而不是您设置的属性,则

MATCH (s)
WHERE ID (s) = 1
OPTIONAL MATCH s-[r]-()
DELETE r, s

应该有用。通过节点的内部id来控制节点是不规则的,通常是不好的。

我尝试了这个方法,但失败了。获取错误:
javax.transaction.HeuristicRollbackException:提交事务失败(866,所有者:“qtp1165358333-120”)[状态\u无\u事务,资源=1],事务回滚-->javax.transaction.xa.XAException
我认为您最初的查询很好,但是您必须将
WHERE
子句与第一个
匹配
子句放在一起
n.id
是一个名为
id
的属性<代码>ID(n)指的是内部节点ID,它不是属性。当节点没有任何关系时,删除该节点也需要可选的匹配项。很好的捕获-知道我最初将其放入其中是有原因的:)