0

我有一个图形数据库,它由节点(公交车站)组成,如果公交车站正常运行,则该属性名为“is_in_operation”,该属性设置为“true”;否则设置为“假”。

如果公共汽车在两个车站之间行驶,则在两个节点之间建立关系。

我想找到路径中所有节点都可操作的两个节点之间停靠点最少的路径。

数据库中有一个示例,其中 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”并重新运行查询时,我希望它返回另一条路径。但是,我根本没有得到任何答案。

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

4

1 回答 1

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;
于 2013-04-01T22:11:20.880 回答