格式、参数
RETURN 可以对数据流进行函数运算,将多个返回值(数据列)组装到一起返回给用户。返回值中有非同源列时,按照同源列长度的最小值对各列进行裁剪(或不裁剪 V4.1 )。
语法:
- 格式:return
<column1>
as<alias1>
,<column2>
as<alias2>
, ... - 参数:(见下表)
- 受影响列:
<column>
及其所有同源列
名称 | 类型 | 规范 | 描述 |
---|---|---|---|
<column> |
NODE,EDGE,PATH,ATTR,ARRAY,TABLE | / | 返回值,多个返回值可以为同源列、非同源列 |
<alias> |
string | 同自定义别名的命名规范 | 返回值的别名,可省略 |
详解
find().nodes() as n1 limit 5
n(3).e()[2].n(as n2) as path
return n1, pnodes(path), distinct(n2.color)
上面 UQL 代码中的 RETURN 子句中有三个返回值,类型分别为 NODE,ARRAY,ATTR;其中第一列和后两列非同源,使用 V4.0 版引擎时不会返回红色虚线以下的部分:
在 RETURN 子句中对某列进行去重操作时,不影响其同源列的长度。RETURN 子句通常出现在 UQL 语句的末尾,个别情况时其后可以出现 ORDER BY、LIMIT、SKIP。
关于 RETURN 子句中如何指定 NODE、EDGE、PATH 所携带的属性,请阅读《查询》-《返回值》一章。
返回 NODE
示例:返回 10 个点的全部属性值
find().nodes() as n
limit 10
return n{*}
示例:获取 50 个 @card 或 @customer 点,携带 balance、level
find().nodes({@card || @customer}) as n
limit 50
return n{balance, level}
分析:@card 点有 balance、level 两种属性,@customer 点只有 level。返回值仅携带其自身具有的属性。
返回 EDGE
示例:返回 50 条边,不携带任何自定义属性
find().edges() as e
limit 50
return e
返回 PATH
示例:返回 10 条三步路径,不携带点、边的任何自定义属性
n().e()[3].n() as p
limit 10
return p
示例:返回 10 条顾客的银行卡之间的一步转账路径,携带 balance 和 time
n({@customer}).e().n({@card})
.e().n({@card})
.e().n({@customer}) as p
limit 10
return p{balance}{time}
分析:返回值仅携带其自身具有的属性。@card 点将携带 balance,@transfer 边将携带 time,所有点、边均携带系统属性及 schema。
示例:返回 10 条顾客的银行卡之间的一步转账路径,所有点携带全部属性,所有边不携带任何自定义属性
n({@customer}).e().n({@card})
.e().n({@card})
.e().n({@customer}) as p
limit 10
return p{*}{}
示例:返回 10 条顾客的银行卡之间的一步转账路径,所有点、边携带全部属性
n({@customer}).e().n({@card})
.e().n({@card})
.e().n({@customer}) as p
limit 10
return p{*}
返回 ATTR
示例:获取 100 条边,返回它们的 schema 名称、amount(如有)
find().edges() as e
limit 100
return e.@, e.amount
分析:没有 amount 的边在返回值 e.amount 中将返回空值。
示例:统计所有银行卡余额的最大值
find().nodes({@card}) as n
return max(n.balance)
返回 ARRAY
示例:获取 10 个银行卡,将卡号聚合为数组并返回
find().nodes({@card}) as n
limit 10
return collect(n._id)
返回 TABLE
示例:获取 10 条转账边,将边的起点卡号、终点卡号、转账金额合并为表格并返回
n(as n1).e({@transfer} as e).n(as n2)
limit 10
return table(n1._id, n2._id, e.amount)