Neo4j如果节点没有传出边,则删除该节点,否则返回其下一个节点
我试图使用Neo4j Cypher实现以下功能:给定一个节点,检查它是否有任何具有特定关系类型的传出边。如果是,则返回它可以通过这些边伸出的节点,否则删除此节点。我的代码是这样的Neo4j如果节点没有传出边,则删除该节点,否则返回其下一个节点,neo4j,cypher,Neo4j,Cypher,我试图使用Neo4j Cypher实现以下功能:给定一个节点,检查它是否有任何具有特定关系类型的传出边。如果是,则返回它可以通过这些边伸出的节点,否则删除此节点。我的代码是这样的 MATCH (m:Node{Properties}) WITH (size((m)-[:type]->(:Node))) AS c,m WHERE c=0 DETACH DELETE m 然而,我不知道如何在这里应用if/else条件,而这段代码只实现了我需要的部分内容。我非常感谢你的帮助和建议 例如,数据库
MATCH (m:Node{Properties})
WITH (size((m)-[:type]->(:Node))) AS c,m
WHERE c=0
DETACH DELETE m
然而,我不知道如何在这里应用if/else条件,而这段代码只实现了我需要的部分内容。我非常感谢你的帮助和建议
例如,数据库如下所示:
A-[类型]->B
A-[类型]->C
如果原始节点是A,并且它有两条属于B和C类型的边,那么我希望查询返回B和C作为结果。
如果原始节点是B,则应将其删除,因为B没有此类传出边缘。[更新]
下面的查询使用一个FOREACH
hack有条件地删除m
,并返回找到的n
节点,如果没有,则返回NULL
OPTIONAL MATCH (m:Node {...Properties...})-[:type]->(n:Node)
FOREACH(x IN CASE WHEN n IS NULL THEN [1] END | DETACH DELETE m)
RETURN n
您也可以使用APOC过程而不是FOREACH
hack:
OPTIONAL MATCH (m:Node {...Properties...})-[:type]->(n:Node)
CALL apoc.do.when(n IS NULL, 'DETACH DELETE m', '', {m: m}) YIELD value
RETURN n
您可能希望使用APOC条件过程感谢您的建议,但我在使用java中的APOC查询时遇到一些问题。它总是有一些问题,我们可以随时帮助您:)谢谢您的回复!但当原始节点具有该类型的传出边时,它似乎无法返回所有可访问的节点。您的原始问题没有要求返回任何内容。查看我的最新答案非常感谢,很抱歉我没有清楚地描述我的问题!:)很抱歉再次打扰您,我对FOREACH子句中的“x”有点困惑,这是否意味着案例编号?
x
和[1]
只是使FOREACH
子句合法并按预期工作所必需的(如果n为空,则执行DETACH DELETE m
iffn
)。[1]
中的1
值可能是任何东西,而x
值被忽略。APOC方法对于新手来说更容易理解,但可能性能较差。