You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Neo4j中用WHERE匹配可变长度路径并过滤相邻关系属性

单个Cypher查询实现相邻关系met_at属性去重过滤

当然可以用单个查询实现需求,核心是利用Cypher的路径遍历函数和条件判断,在WHERE子句中检查路径内所有相邻的KNOWS关系的met_at属性是否互不相同。

最终查询语句

MATCH path = (:Person {name:'A'})-[r:KNOWS*1..5]->(:Person {name:'F'})
WHERE all(i IN range(1, length(r)-1) WHERE r[i-1].met_at <> r[i].met_at)
RETURN path

语句解释

  1. 路径捕获:用path变量存储完整路径,同时通过r获取路径中的所有KNOWS关系集合。
  2. 相邻关系校验:
    • length(r)获取路径内关系的总数量,range(1, length(r)-1)生成从第2个关系到最后一个关系的索引序列。
    • all(...)遍历索引序列,确保每一个索引对应的关系,其met_at属性与前一个关系(索引i-1)的met_at属性不相等。
    • 该条件会自动排除所有存在相邻KNOWS关系met_at相同的路径。

匹配验证

  • 符合要求的路径A->C->E->F:相邻关系的met_at依次为1→2、2→3,均不相同,会被正常返回。
  • 需要过滤的路径A->B->D->E->F:其中B->D和D->E的met_at均为2,属于相邻属性相同,会被WHERE条件排除。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:59:52