如何返回包含最多3个SECOND关系的FIRST|SECOND变长路径?
最优解决方案:限制变长路径中SECOND关系的数量
要返回由FIRST和SECOND类型关系组成、且其中SECOND关系数量最多为3的变长路径,可以通过路径匹配+条件过滤的方式实现,具体Cypher语句如下:
MATCH path=(a)-[r:FIRST|SECOND*..]->(b) WHERE size([rel IN relationships(path) WHERE type(rel) = 'SECOND']) <= 3 RETURN path
逻辑说明
MATCH path=(a)-[r:FIRST|SECOND*..]->(b):匹配所有起点为a、终点为b,由任意数量FIRST或SECOND关系组成的变长路径(*..表示路径长度无上限,若需要限制总关系数量,可改为*..n,比如*..10表示总关系数不超过10)。WHERE size([rel IN relationships(path) WHERE type(rel) = 'SECOND']) <= 3:通过列表推导式提取路径中所有SECOND类型的关系,用size()获取其数量,过滤出数量≤3的路径。
性能优化提示
如果数据库数据量较大,建议结合节点标签、属性等条件缩小匹配范围,避免全图扫描。例如若a和b属于Node标签,可修改为:
MATCH path=(a:Node)-[r:FIRST|SECOND*..]->(b:Node) WHERE size([rel IN relationships(path) WHERE type(rel) = 'SECOND']) <= 3 RETURN path
内容的提问来源于stack exchange,提问作者Tix
相关产品推荐
相关产品推荐

