UNCOLLECT 可以将列表中的每个元素释放为单独的一行,原始行及其同源数据相应复制为多行。释放之后的数据流的长度等于原先所有列表的长度之和。
语法:UNCOLLECT <expression>
as <alias>
参数:
- <expression>:被释放的列表
- <alias>:释放结果的别名,不可省略
例如,将 1~3 步路径 path 中的所有节点释放出来,释放之前 path、a1 共 2 行,释放之后 path、a2 共 6 行:
n(2).e()[:3].n(4) as path
with pnodes(path) as a1
uncollect a1 as a2
return path, a2
示例图集:(以下示例将在本图基础上运行)
create().edge_property(@default, "weight", int32)
insert().into(@default).nodes([{_id:"A", _uuid:1}, {_id:"B", _uuid:2}, {_id:"C", _uuid:3}, {_id:"D", _uuid:4}, {_id:"E", _uuid:5}, {_id:"F", _uuid:6}])
insert().into(@default).edges([{_uuid:1, _from_uuid:1, _to_uuid:3, weight:1}, {_uuid:2, _from_uuid:5, _to_uuid:2 , weight:1}, {_uuid:3, _from_uuid:1, _to_uuid:5 , weight:4}, {_uuid:4, _from_uuid:4, _to_uuid:3 , weight:2}, {_uuid:5, _from_uuid:5, _to_uuid:4 , weight:3}, {_uuid:6, _from_uuid:2, _to_uuid:1 , weight:2}, {_uuid:7, _from_uuid:6, _to_uuid:1 , weight:4}])
一般用法
示例:查找从 A 到 D 的 2 步路径,将这些路径上的点去重后返回
n({_id == "A"}).e()[2].n({_id == "D"}) as p
uncollect pnodes(p) as a
with dedup(a) as b
return b{*}
| _id | _uuid |
|-----|-------|
| A | 1 |
| C | 3 |
| D | 4 |
| E | 5 |