我正在尝试编写一个cypher查询,该查询在节点a和b之间找到一条路径,这样每个步骤都有一个小于15的所有可用备选方案中的最大时间戳值。
到目前为止,这是我的查询,除了在每一步选择最大可能的时间戳之外,它会执行所有操作。我该如何表达这种情况?
MATCH path=(a:NODE)-[rs:PARENT*]->(b:NODE)
WHERE a.name = 'SOME_VALUE' and b.name = 'SOME_OTHER_VALUE' AND ALL (r IN rs
WHERE r.timestamp < 15)
RETURN path
这只是糟糕的sudo代码,但我认为它表达了我正在寻找的东西
MATCH path=(a:NODE)-[rs:PARENT*]->(b:NODE)
WHERE a.name = 'SOME_VALUE' and b.name = 'SOME_OTHER_VALUE' AND ALL (r IN rs
WHERE r.timestamp < 15 AND r.timestamp = max(allPossibleRsForThisStep))
RETURN path
这种查询可以用cypher编写吗?
答案 0 :(得分:0)
在密码中不会很快,可以先计算所有最大值,然后通过将列表中的最大值与当前值进行比较来做你想做的事。
这样的东西(不确定它是否有效)
WITH range(1,10) as max_vals // a list with 10 values (actual values are not that important)
MATCH (a:NODE)-[rs:PARENT*..10]->(b:NODE)
WHERE a.name = 'SOME_VALUE' and b.name = 'SOME_OTHER_VALUE'
WITH a,b,
map(idx in range(0,size(rs)) |
max_vals[idx] = case when max_vals[idx]<rs[idx].timestamp then rs[idx].timestamp else max_vals[idx] end ), max_vals
MATCH path=(a)-[rs:PARENT*..10]->(b)
AND ALL (idx in range(0,size(rs) WHERE rs[idx].timestamp < 15 AND rs[idx].timestamp = max_vals[idx])
RETURN path