【发布时间】:2015-05-08 18:06:05
【问题描述】:
我正在尝试查找给定节点类型的所有开始节点,从我的数据库中的任何节点开始。这些是没有指向它们的关系的节点。
我目前正在手动执行此操作,但需要递归类型的语句来简化和扩展。这是我到目前为止所拥有的,并带有一个描述我需要的返回语句。
MATCH ((d1:Type1 {Name: "test1"}))
MATCH ((t1:Type2)-[:Rel1]->(h1:Type3))
MATCH ((d1)<-[ud1:Rel3]-(t1))
OPTIONAL MATCH ((h1)<-[:Rel1]-(t2:Type2))
OPTIONAL MATCH ((t2)<-[:Rel2]-(d2:Type1))
OPTIONAL MATCH ((d2)<-[ud2:Rel3]-(t3:Type2))
OPTIONAL MATCH ((t3)-[:Rel1]->(h2:Type3))
OPTIONAL MATCH ((h2)<-[:Rel1]-(t4:Type2))
OPTIONAL MATCH ((t4)<-[:Rel2]-(d3:Type1))
OPTIONAL MATCH ((d3)<-[ud3:Rel3]-(t5:Type2))
RETURN DISTINCT Type1.Name where there is no Rel3 relationship
这里的问题是导航递归
Type1 < - Type2 -> Type3 <- Type2 < - Type1 < - Type2 -> Type3 <- Type2
path,直到没有Type2指向Type1,返回这些Type1的名字。
【问题讨论】:
-
所以要返回所有没有Rel3关系的Type1节点?
标签: recursion neo4j cypher graph-databases