[英]How to query extended path between nodes with Cypher in Neo4J?
我正在使用 Neo4J/Cypher 基于图形模型存储/检索一些数据。
让我们假设以下模型:我有一组通过关系 (type=CONNECTED_TO) 连接的节点 (type=child)。
C1 -[:CONNECTED_TO]-> C2 -[:CONNECTED_TO]-> C3 -[:CONNECTED_TO]-> C4
如果我想在不知道中间体的情况下查询从 C1 到 C4 的路径:
MATCH p=
(a:child {id:'c1Id'}) -[:CONNECTED_TO*0..]-(z:child {id:'c4Id'})
RETURN p
到现在为止还挺好。
现在假设每个孩子都包含在一个父级中,我想从父级 ID 开始查询
P1 -[:CONTAINS]-> C1
P2 -[:CONTAINS]-> C2
P3 -[:CONTAINS]-> C3
P4 -[:CONTAINS]-> C4
查询如下所示:
MATCH p=
(a:parent {id:'p1Id'})
-[:CONTAINS]->
(cStart:child)
-[:CONNECTED_TO*0..]-
(cEnd:child)
<-[Contains]-
(z:parent {id:'p4Id'})
RETURN p
这给了我很好的结果。 以下路径:
P1 -[:CONTAINS]-> C1 -[:CONNECTED_TO]-> C2 -[:CONNECTED_TO]-> C3 -[:CONNECTED_TO]-> C4 <-[:CONTAINS]- P4
我想要做的是使用子拓扑查询从 P1 到 P4 的这条路径,但我还想检索包含中间体的所有父级。
除此之外,我如何改进我的最后一个密码查询以返回:
P2 -[:CONTAINS]-> C2
P3 -[:CONTAINS]-> C3
是否可以? 也许我的模型设计不适合该用例? 在这种情况下,如何改进它以解决此查询?
发送
您可以使用list comprehension
结构:
MATCH p=
(a:parent {id:'p1Id'})
-[:CONTAINS]->
(cStart:child)
-[:CONNECTED_TO*0..]-
(cEnd:child)
<-[Contains]-
(z:parent {id:'p4Id'})
RETURN p,
[n IN nodes(p)[1..-1] | (n)<-[:CONTAINS]-(:parent)][0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.