gpt4 book ai didi

Neo4j:检查路径中所有连续关系之间的条件

转载 作者:行者123 更新时间:2023-12-01 11:23:48 28 4
gpt4 key购买 nike

我想查询任意长度的所有路径

(a)-[:Relation*]->(b)

其中对于连续关系的每一对 (r1, r2)

()-[r1]->()-[r2]->()

满足一个条件,比如 r2.foo > r1.foo

你可以想象 foo 是一个时间戳,我只想找到所有步骤都按时间顺序排列的路径。


我目前拥有的是:

MATCH path = ()-[:Relationship*]->()
WITH rels(path) AS rels, path
WHERE reduce(acc = { inOrder: true, previous: rels[0] }, r IN tail(rels) |
{ inOrder: acc.inOrder AND r.foo > acc.previous.foo, previous: r }).inOrder
RETURN path

现在,这似乎奏效了。但是,我不确定这是否是最有效的查询。有更好的方法吗?

最佳答案

你实际上可以做到这一点,通过在路径的关系集合的大小上使用 ALL 谓词,示例:

MATCH p=(a:Cool)-[*]->(c) 
WHERE ALL ( x IN range(1, length(p)-1) WHERE (rels(p)[x]).i > (rels(p)[x-1]).i )
AND length(p) > 1
RETURN p

我查询中的 i 属性将是您关系的时间戳属性

这里的工作示例:

http://console.neo4j.org/r/2bzo4m

关于Neo4j:检查路径中所有连续关系之间的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39454035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com