我试图找到两个节点之间的最短路径(使用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
答案 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