(y1:Y)
^
|
(a1:A) -> (b1:B) -> (c1:C)
^
|
(s1:S)
^
|
(z1:Z)
(e1:E)
^
|
(d1:D)
^
|
(a2:A) -> (b2:B) -> (c2:C) -> (y2:Y)
^
|
(s2:S)
^
|
(z2:Z)
(a3:A) -> (b3:B) -> (c3:C)
^
|
(s3:S)
^
|
(z3:Z) (z4:Z)
我想找到节点标签A和C之间的路径,并得到节点标签Y和节点标签D,E,如果这些装饰节点存在的话。我还总是需要提取装饰S节点的Z节点,该节点装饰C节点。有多个Z类型节点可以修饰S节点,所以我提取了Z节点作为列表。
所以我可以使用这个查询
MATCH p=((:A)-[*]->(c:C)), (c)<--(:S)<--(z:Z)
WITH p, z,
HEAD([(c)--(y:Y) | y ]) AS yDecoration,
[(c)-[*]->(d:D)-[*]->(e:E) | [d,e]] AS deDecoration
RETURN p, yDecoration, deDecoration, collect(z) as zDecoration
但是,如果我只想返回子图,而不是在返回中分别拆分节点y,d,e怎么办?例如,在上面的例子中,我的返回将只是三个子图。每个子图包含路径A->C和路径节点之间的节点、边关系、Y和D/E,因此如果以后需要的话,不需要重建该图。
// need a cypher query statement
RETURN subgraph, zDecoration
2条答案
按热度按时间e5nszbig1#
您可以使用变量路径[*0..]为了将节点连接到C,零意味着C可以没有连接的节点(如C3)。
结果:
vmdwslir2#
这可能不是最好的方法,但这会有帮助吗: