【发布时间】:2019-02-06 07:41:03
【问题描述】:
我正在使用 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
有可能吗?也许我的模型设计不适合那个用例?在这种情况下,如何改进它来解决这个查询?
发送
【问题讨论】: