Neo4j cypher中的叶节点和路径

Neo4j cypher中的叶节点和路径,neo4j,cypher,Neo4j,Cypher,我在Neo4J中有一个图形,看起来像这样: (a {flag:any})<- (many, 0 or more) <-(b {flag:true})<- (many, 0 or more) <-(c {flag: any}) -OR- (a {flag:any})<- (many, 0 or more) <-(d) -OR- (a {flag:any}) (a{flag:any})我将此查询作为两种情况的联合处理: MATCH shortestPath((a

我在Neo4J中有一个图形,看起来像这样:

(a {flag:any})<- (many, 0 or more) <-(b {flag:true})<- (many, 0 or more) <-(c {flag: any})
-OR-
(a {flag:any})<- (many, 0 or more) <-(d)
-OR-
(a {flag:any})

(a{flag:any})我将此查询作为两种情况的
联合处理:

MATCH shortestPath((a)<-[:REL_TYPE*1..]-(end:Label {flag: true}))
RETURN a, end
UNION
MATCH (a)<-[:REL_TYPE*0..]-(end:Label)
WHERE NOT (end)<-[:REL_TYPE]-()
RETURN a, end

MATCH shortestPath((a)我将此查询作为两种情况的
联合处理:

MATCH shortestPath((a)<-[:REL_TYPE*1..]-(end:Label {flag: true}))
RETURN a, end
UNION
MATCH (a)<-[:REL_TYPE*0..]-(end:Label)
WHERE NOT (end)<-[:REL_TYPE]-()
RETURN a, end

MATCH shortestPath((a)以下查询应返回所有3种路径。我假设所有相关节点都标记为
Foo
,并且所有相关关系都具有
BAR
类型

WHERE
子句的第一项查找路径(长度为0或更多,因为
MATCH
clause中使用了可变长度关系模式),该路径在路径前面具有
true
标志且没有
true
标志的节点中结束(可能除了起始节点).第二项查找以叶节点结尾的路径(长度为0或更多),其中没有节点(可能除了起始节点)具有
true
标志

MATCH p=(a:Foo)<-[:BAR*0..]-(b:Foo)
WHERE
  (b.flag AND NONE(x IN NODES(p)[1..-1] WHERE x.flag)) OR
  ((NOT (b)<-[:BAR]-()) AND NONE(y IN NODES(p)[1..] WHERE y.flag))
RETURN p;

MATCH p=(a:Foo)下面的查询应该返回所有3种路径。我假设所有相关节点都标记为
Foo
,并且所有相关关系都具有
BAR
类型

WHERE
子句的第一项查找路径(长度为0或更多,因为
MATCH
clause中使用了可变长度关系模式),该路径在路径前面具有
true
标志且没有
true
标志的节点中结束(可能除了起始节点).第二项查找以叶节点结尾的路径(长度为0或更多),其中没有节点(可能除了起始节点)具有
true
标志

MATCH p=(a:Foo)<-[:BAR*0..]-(b:Foo)
WHERE
  (b.flag AND NONE(x IN NODES(p)[1..-1] WHERE x.flag)) OR
  ((NOT (b)<-[:BAR]-()) AND NONE(y IN NODES(p)[1..] WHERE y.flag))
RETURN p;

MATCH p=(a:Foo)谢谢Sam。这里的事情我真的不知道集合上的
[1..-1]
位是什么。在这种情况下,它会生成一个新的列表,由
p
中的第二个到最后一个节点组成。有关更多详细信息,请参阅。谢谢Sam。这里的事情我并不真正知道
[1..-1]
集合上的位。在这种情况下,它会生成一个新列表,由
p
中的第二个到最后一个节点组成。有关详细信息,请参阅。