Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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如果节点没有传出边,则删除该节点,否则返回其下一个节点_Neo4j_Cypher - Fatal编程技术网

Neo4j如果节点没有传出边,则删除该节点,否则返回其下一个节点

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条件,而这段代码只实现了我需要的部分内容。我非常感谢你的帮助和建议 例如,数据库

我试图使用Neo4j Cypher实现以下功能:给定一个节点,检查它是否有任何具有特定关系类型的传出边。如果是,则返回它可以通过这些边伸出的节点,否则删除此节点。我的代码是这样的

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
iff
n
)。
[1]
中的
1
值可能是任何东西,而
x
值被忽略。APOC方法对于新手来说更容易理解,但可能性能较差。