如何解决Neo4j如果一个节点没有输出边缘,则删除该节点,否则返回其下一个节点
我正在尝试使用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
骇客有条件地删除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过程apoc.do.when代替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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。