我有一个图形数据库,它由一个名为“is_in_operation”的属性的节点(公交车站)组成,如果公交车站正常运行,则设置为“真”;否则设置为“false”。
如果公交车在两个车站之间行驶,则两个节点之间会建立关系。
我想在两个节点之间找到路径最短的路径,路径中的所有节点都可以运行。
数据库中有一个示例,其中2个指定节点之间有2条路径。两个路径中的所有节点的“is_in_operation”属性都设置为“true”。当我运行以下查询时,我得到了正确的答案
START d=node(1), e=node(5)
MATCH p = shortestPath( d-[*..15]->e ) where all (x in nodes(p) where x.is_in_operation='true')
RETURN p;
当我为最短路径中的一个中间节点设置'is_in_operation'属性为'false'并重新运行查询时,我希望它返回另一个路径。但是,我根本没有回答。
查询不正确吗?如果是这样,我该如何指定查询?
答案 0 :(得分:3)
问题是shortestPath
无法考虑where
子句,因此您匹配最短路径,然后将其与where
一起过滤。
这个怎么样 - 它可能没有shortestPath那么高效,但它应该返回一个结果,如果存在的话:
START d=node(1), e=node(5)
MATCH p = d-[*..15]->e
where all (x in nodes(p) where x.is_in_operation='true')
RETURN p
order by len(p)
limit 1;