如何使用 Neo4j 密码查询删除节点及其连接的节点?

How to delete a node and its connected nodes with Neo4j cypher query?

例如,我想删除 id = "005A" 的 Actor 个节点及其连接的 Movie 个节点。 Actor和Movie节点的关系是ACTED_IN.

我试过这个密码查询:

MATCH (a:Actor {id: "005A"})
OPTIONAL MATCH (a)-[r:ACTED_IN]->(m)
DELETE a, r, m;

但它没有用,我得到 TransactionFailureException: Unable to commit transaction 错误。

谁能给个解决办法?

更新:

我发现从其他节点 (Agency) 到标记为 OWNEDActor 节点存在关系。所以图表是这样的:

(aa:Agency)-[o:OWNED]->(a:Actor)

您确定 ID 编码为字符串 属性 吗?我猜电影数据库的 id 是一个整数,因此 id 不应该用引号引起来:

MATCH (a:Actor {id: 5})
OPTIONAL MATCH (a)-[r:ACTED_IN]->(m)
DELETE a, r, m;

[编辑]

您不能删除一个节点,除非它的所有关系也都被删除。在您的情况下,a and/or m 节点可能具有 r.

以外的关系

要获取与 am 关联的关系类型集,您可以使用以下内容(我已将结果限制为 10 行,以防 a and/or m 有很多关系`):

MATCH (a:Actor {id: "005A"})
OPTIONAL MATCH ()-[rx]-(a)
OPTIONAL MATCH (a)-[r:ACTED_IN]->(m)
OPTIONAL MATCH (m)-[ry]-()
RETURN a, r, m, COLLECT(DISTINCT TYPE(rx)), COLLECT(DISTINCT TYPE(ry))
LIMIT 10;

我怀疑您的结果会显示 ACTED_IN 以外的类型。

以下查询应删除 s/he 出演的演员和所有电影:

MATCH (a:Actor {id: "005A"})
OPTIONAL MATCH ()-[rx]-(a)
OPTIONAL MATCH (a)-[r:ACTED_IN]->(m)
OPTIONAL MATCH (m)-[ry]-()
DELETE rx, ry, r, a, m;