找到满足关系的最近节点

时间:2014-07-25 23:34:08

标签: neo4j cypher

假设我有以下图表:

CREATE 
(a:SomeValue {name:'A'}), 
(b:SomeValue {name:'B'}),
(c:SomeValue {name:'*'}),
(a)-[:CHILD_OF]->(b),
(b)-[:CHILD_OF]->(c),
(c:SomePath {path:'A-B'}), 
(c)-[:FROM]->(a),
(c)-[:TO]->(b),
(d:SomePath {path:'*-*'}),
(d)-[:FROM]->(c),
(d)-[:TO]->(c)

假设我正在寻找(path)-[:FROM]->(b)(path)-[:TO]->(b)的配置。

显然,在我的图表中没有'B-B'路径,所以我希望某种回退搜索能够查找'*-*'的存在,这是默认路径。

基本上我要说的是:找一个(path)-[:FROM]->(b),如果没有,请将最近的 SomeValue x绑定到{{1}通过满足b关系的CHILD_OF关系。

有没有办法用Cypher表达这个?

1 个答案:

答案 0 :(得分:0)

dierre,

我认为你可以通过UNION实现这一目标。

MATCH p=(b:SomeValue)<-[:FROM]-(a:SomePath)-[:TO]->(b)
RETURN p
UNION
MATCH p=(b:SomeValue)<-[r:CHILD_OF*]-(c:SomeValue)<-[:FROM]-(a:SomePath)-[:TO]->b
RETURN p

恩典与和平,

吉姆