命令、参数
查询一个起点及其 1~KHop 邻居节点之间的所有边,可以对最大深度、邻居点(非起点)、边进行多种过滤,并按照 K = 1、2、... 的顺序先后返回由边的起点、边、边的终点构成的一步路径。
与 K 邻查询相同,展开也是一种 BFS(广度优先)方式的查询,是图计算与分析领域中的一个很常用的手段,用于观察某一个实体周围的层层关系,快速检索并获取数据。
语法:
- 命令:
spread()
- 必选参数:
src()
、depth()
- 全部参数:(见下表)
- 语句别名类型:PATH
参数 | 类型 | 规范 | 描述 | 参数别名类型 |
---|---|---|---|---|
src() |
filter | / | 路径起点的过滤条件;多个点满足条件时会报错 | NODE |
depth() |
int | >0 | 展开的最大深度 | 不支持自定义别名 |
node_filter() |
filter | / | 邻居点(非 src )的过滤条件 |
不支持自定义别名 |
edge_filter() |
filter | / | 所有边的过滤条件 | 不支持自定义别名 |
direction() |
string | left, right | 规定边的方向 | 不支持自定义别名 |
limit() |
int | -1 或 >=0 | 展开单次执行时返回结果的条数,-1 表示返回所有结果 | 不支持自定义别名 |
1~N 步展开
示例:展开银行卡 CA001 的 3 步以内的边,以一步路径的形式返回 10 条结果并携带全部信息
spread().src({_id == "CA001"}).depth(3) as p
limit 10
return p{*}
邻居点过滤展开
示例:展开银行卡 CA001 的 3 步以内的边,要求邻居点不是银行卡,以一步路径的形式返回 10 条结果并携带全部信息
spread().src({_id == "CA001"}).depth(3)
.node_filter({!@card}) as p
limit 10
return p{*}
边过滤展开
示例:展开银行卡 CA001 的 3 步以内的边,要求边不是转账边,以一步路径的形式返回 10 条结果并携带全部信息
spread().src({_id == "CA001"}).depth(3)
.edge_filter({!@transfer}) as p
limit 10
return p{*}
右向边展开
示例:展开银行卡 CA001 的 3 步以内的边,要求边均为右向边,以一步路径的形式返回 10 条结果并携带全部信息
spread().src({_id == "CA001"}).depth(3)
.direction(right) as p
limit 10
return p{*}
左向边展开
示例:展开银行卡 CA001 的 3 步以内的边,要求边均为左向边,以一步路径的形式返回 10 条结果并携带全部信息
spread().src({_id == "CA001"}).depth(3)
.direction(left) as p
limit 10
return p{*}
单次查询数量限制
示例:展开银行卡 CA001、CA002 的 3 步以内的边,以一步路径的形式各返回 20 个边,携带全部信息
uncollect ["CA001","CA002"] as n
spread().src({_id == n}).depth(3)
.limit(20) as p
return p{*}