【发布时间】:2016-01-06 05:50:15
【问题描述】:
我正在存储一个节点序列,其中一个节点与序列中的前一个节点以及表示“对象”的另一个节点相关。所以例如我可能有这个序列:
(S1)<-[r]-(S2)<-[r]-(S3)<-[r]-(S4)
然后序列中的每个节点都与另一个节点相关,例如:
(S1)-[r]->(O1)
(S2)-[r]->(O2)
(S3)-[r]->(O1)
(S4)-[r]->(O3)
在本例中,S1 和 S3 都与 O1 相关。
我想要实现的是将起点指定为“O1”,并能够在上面的示例中获得从 S1 到 S4 的完整路径。
我能够通过在 S1 中添加一个名为“start”的属性和在 S4 中添加另一个名为“end”的属性来表示序列的开始和结束,并使用此查询仅获取完整序列:
MATCH (O:Obj{name:'O1'}),
path=(O)<-[:OBJECT]-(first:SEQ)<-[:PREV*]-(last:SEQ)
WHERE has(first.start)
AND has(last.end)
return path
但是,我想知道如果没有“开始”和“结束”属性,是否有更好的方法来实现这一点。我在不使用属性时遇到的问题是序列被分解,所以我得到的不是一个序列:
(S1)<-[r]-(S2)
(S1)<-[r]-(S2)<-[r]-(S3)
(S1)<-[r]-(S2)<-[r]-(S3)<-[r]-(S4)
(S3)<-[r]-(S4)
是否有可能只获得完整的序列?
【问题讨论】: