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

时间:2015-01-13 18:52:11

标签: neo4j cypher graph-databases

例如,我想要删除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)与Actor节点之间存在关系,标记为OWNED。所以图表是这样的:

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

2 个答案:

答案 0 :(得分:3)

[EDITED]

除非删除了所有关系,否则无法删除该节点。在您的情况下,a和/或m节点可能具有r以外的关系。

要获取与am相关联的一组关系类型,您可以使用以下内容(我已将结果限制为10行,以防a和/或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以外的其他类型。

以下查询应删除演员和他/她所扮演的所有电影:

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;

答案 1 :(得分:0)

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

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