使用节点属性过滤器查找2个节点之间的最短路径(Find shortest path between

2019-08-18 19:19发布

我有由具有所谓的“is_in_operation”被设定为“真”,如果公共汽车站操作属性节点(总线站)的曲线图数据库; 否则将其设置为“假”。

有两个节点之间建立的关系,如果总线在两个站之间传播。

我想找到其中的路径上的所有节点都运行在两个节点之间停止的数最短的路径。

有在数据库中的示例,其中有2个指定的节点2点之间的路径。 该“is_in_operation”属性设置为“真”在两个路径的所有节点。 当我运行下面的查询,我得到正确的答案

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”属性“假”,争取在最短路径中的中间节点之一,并重新运行查询,我希望它返回的另一条路径。 不过,我得到根本没有答案。

是查询不正确的? 如果是这样,我应该怎么指定查询?

Answer 1:

问题是, shortestPath不能顾及where条款,所以你匹配的最短路径,然后将筛选出来where

这个怎么样 - 它可能不会像最短路径作为有效的,但它应该返回结果,如果存在的话:

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;


文章来源: Find shortest path between 2 nodes using a node property filter
标签: neo4j cypher