澄清CYPHER dijkstra查询如何在reduce函数中使用WHERE子句

时间:2016-08-02 12:48:45

标签: neo4j

我试图找到两个节点之间的最短路径(使用dijkstra算法),其中所有关系都具有distance属性。 我的要求是我需要在调用shortestpath之前根据为节点或关系提供的过滤器来过滤路径。

如何在下面的reduce函数中使用WHERE caluse来过滤节点或关系。

  MATCH   p=(a:Place{Name:"US"})-[rels:IS_LOCATED_AT|CARRIES|BELONGS_TO*]-(b:Place{Name:"UK"})
 RETURN p as shortestPath,
 REDUCE(distance=0, r in rels(p) | distance+r.distance) AS totalDistance
ORDER BY totalDistance ASC

1 个答案:

答案 0 :(得分:0)

REDUCE表达式中,您可以使用CASE有选择地更新累加器变量(distance,在您的示例中)。

作为一个简单(而且愚蠢)的例子,如果你想忽略任何不到100英里的distance

REDUCE(distance=0, r in rels(p) | CASE WHEN r.distance >= 100 THEN distance+r.distance ELSE distance END) AS totalDistance