Neo4j cypher:删除一系列关系

时间:2016-05-16 15:26:28

标签: neo4j cypher

我认为这可能是一个错误,但是,当删除关系集合时,也会删除起始节点。我正在运行neo4j社区版2.3.3并按顺序运行以下查询。

match (u:User)-[]->(p:Pie)-[c:CONSISTS_OF*1]->() where id(u) = 6398 and id(p)= 6436 return p,c返回Displaying 3 nodes, 2 relationships.和图片Displaying 3 nodes, 2 relationships.中的图表

match (u:User)-[]->(p:Pie)-[c:CONSISTS_OF*1]->() where id(u) = 6398 and id(p)= 6436 FOREACH( q in c | DELETE q)结果为Deleted 2 relationships, statement executed in 103 ms.

然后我发现的是,而不是删除关系c的集合,节点p也被删除...

match (u:User)-[]->(p:Pie)-[c:CONSISTS_OF*1]->() where id(u) = 6398 and id(p)= 6436 return p结果为(no rows)

我只想删除关系集合。我也觉得这个功能是有意义的,但自2013年底以来就没有重新审视...... https://github.com/neo4j/neo4j/issues/1612

编辑:在问题的早期版本中,我有DETACH DELETE而不是DELETE。在发布问题时这是一个错误。我已经修改过了。应该注意的是,我认为这可能是一个错误的原因是因为DETACH DELETE和DELETE在这种情况下表现相同。

1 个答案:

答案 0 :(得分:1)

在删除关系后用于检查MATCH节点是否存在的(p:Pie)查询中,您仍然包含模式的-[c:CONSISTS_OF*1]->部分。该部分与任何内容都不匹配,因为您删除了这些关系。但是,无论节点是否仍然存在,整个模式也不会匹配任何东西。

您可以使用MATCH (p:Pie) WHERE id(p) = 6436来测试(p:Pie)节点是否仍然存在。