Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher根据条件删除节点及其子节点_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher根据条件删除节点及其子节点

Neo4j Cypher根据条件删除节点及其子节点,neo4j,cypher,Neo4j,Cypher,我最近开始使用Neo4j版本3.4.1,但仍在学习其中的细微差别。在我的应用程序中,我有以下节点关系。 我正在努力实现以下目标 我可以删除节点C1或C2。我也可以删除它们的对应关系,即HAS_X或HAS_Y 但是,当我同时删除C1和C2时,节点L1及其其他相关节点M1、M2和M3将成为孤立节点。因此,我想要的是,每当我删除C1或C2时,如果它是唯一一个与节点L1有Y关系的节点,那么在这种情况下,节点L1及其相关节点M1、M2和M3也应该被删除。如果它不是唯一一个与L1有Y关系的节点,在这种情况

我最近开始使用Neo4j版本3.4.1,但仍在学习其中的细微差别。在我的应用程序中,我有以下节点关系。

我正在努力实现以下目标

我可以删除节点C1或C2。我也可以删除它们的对应关系,即HAS_X或HAS_Y

但是,当我同时删除C1和C2时,节点L1及其其他相关节点M1、M2和M3将成为孤立节点。因此,我想要的是,每当我删除C1或C2时,如果它是唯一一个与节点L1有Y关系的节点,那么在这种情况下,节点L1及其相关节点M1、M2和M3也应该被删除。如果它不是唯一一个与L1有Y关系的节点,在这种情况下,我们只需删除该特定节点,即C1/C2。节点L1和其余节点保持未拉伸状态。 节点U1和U2在这两种情况下都不受影响

我不确定如何使用单个密码查询实现这一点

注意:我能够通过运行两个单独的查询来实现我的目标:一个用于删除节点C1/C2,另一个用于删除孤立节点L1。然而,这并不是最有效的,因为我必须往返两次到db

有人能给我一些关于如何完成这项任务的建议吗?我正在寻找一个cyper查询解决方案,我正在避免APOC程序,因为我听说它需要对neo4jdb配置进行一些修改

问候,


V

您只需使用密码即可完成此操作:

...// above is your match to 'c', the node to delete
OPTIONAL MATCH (c)-[:HAS_Y]->(l)
DETACH DELETE c
WITH DISTINCT l
WHERE size(()-[:HAS_Y]->(l)) = 0
OPTIONAL MATCH (l)-[:HAS_Z*0..1]->(toDelete)
DETACH DELETE toDelete

我们首先匹配l,然后删除c。此时,我们只需对不再具有任何传入:HAS_Y关系的任何l节点采取操作。我们只对这些进行筛选,然后使用一个可选的0..1变量关系匹配来捕获l节点及其所有子节点:HAS_Z relationships,然后删除所有这些节点。l及其所有可能的子节点都将通过toDelete进行处理。

谢谢@InverseFalcon.,您的解决方案非常有效。这正是我想要的。