OrientDB 3.2.3 如何查询顶点#17:9关联的所有完整路径
OrientDB全路径查询缺失问题解决方案
问题原因
- 原遍历语句仅使用
in()沿入边方向遍历,若目标路径中存在出边方向的关联关系,会直接遗漏对应路径 - OrientDB默认遍历逻辑会自动跳过已访问过的顶点,若多条路径共享中间节点,会截断未遍历的分支,导致部分路径无法返回
调整方案
方案1:优化traverse语法
如果继续使用traverse语法,首先将遍历方向改为双向,同时设置合适的遍历深度阈值避免出现无限循环:
SELECT $path FROM ( TRAVERSE both() FROM #17:9 WHILE $depth <= 10 )
如果调整后仍有路径缺失,可添加参数强制不跳过重复节点:
SELECT $path FROM ( TRAVERSE both() FROM #17:9 WHILE $depth <= 10 OPTIONS {ignoreDuplicates: false} )
你可以根据自身数据的最大路径长度调整$depth的限制值。
方案2:使用MATCH语法(更推荐)
OrientDB 3.x版本支持的MATCH语法对全路径查询的适配性更好,默认会返回所有符合条件的简单路径:
MATCH {rid: #17:9, as: start}-[*..10]-{as: end} RETURN $path
语句中的*..10表示最多遍历10条边,你可以根据需要调整该数值匹配更长的路径。
内容的提问来源于stack exchange,提问作者msp
相关产品推荐
相关产品推荐

