NebulaGraph查询几跳,路径详解
举例,查询1-3跳内的所有朋友
方法1:在 MATCH 中定义路径变量
MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target, length(p) AS hops;
关键修改:
-
在
MATCH后添加p=为路径分配变量名
方法2:使用 relationships() 函数(如果不需完整路径)
MATCH (v:person)-[e:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target, size(e) AS hops;
这里使用:
-
e作为关系变量 -
size(e)计算关系数量(跳数)
方法3:使用 path 函数(Nebula 3.0+)
MATCH (v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target,
length(path(v, v2)) AS hops;
完整正确查询示例
-- 方案1:定义路径变量(推荐)
MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target,
length(p) AS hops,
nodes(p) AS path_nodes,
relationships(p) AS path_edges;
-- 方案2:只计算跳数
MATCH (v:person)-[e:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target,
size(e) AS hops;
关键点说明
-
路径变量定义:
-
在
MATCH中使用p=(start)-[edge]->(end)语法定义路径变量 -
p包含完整路径信息(顶点和边)
-
-
路径函数:
-
length(p):获取路径长度(跳数) -
nodes(p):提取路径中的所有顶点 -
relationships(p):提取路径中的所有边
-
-
替代方案:
-
如果只关心跳数不关心具体路径,使用
size(e)更高效
-
其他相关查询示例
-- 查询路径详情
MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN p;
-- 查询路径中的具体节点
MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
UNWIND nodes(p) AS node
RETURN node;
通过正确定义路径变量,你可以成功执行多跳查询并获取路径长度信息。
郭慕荣博客园

浙公网安备 33010602011771号