概述
NEXT
语句用于按顺序串联多个线性或复合查询语句,前一个查询的结果将结转到下一个查询。NEXT
实现的高级线性构造能实现更复杂的查询。
<advanced linear composition> ::=
<query statement> <next statement> [ { <next statement> }... ]
<next statement> ::=
"NEXT" [ <yield clause> ] <query statement>
<query statement> ::=
<linear query statement> | <composite query statement>
<yield clause> ::=
"YIELD" <yield item> [ { "," <yield item> }... ]
<yield item> ::=
<column name> [ "AS" <binding variable> ]
详情
- 每个
<query statement>
结尾必须包含一个RETURN
语句,指定传递给NEXT
后紧挨的下一个<query statement>
的变量。 RETURN
语句支持使用YIELD
从句,详见NEXT YIELD。
示例图

CREATE GRAPH myGraph {
NODE User ({name string}),
NODE Club (),
EDGE Follows ()-[{}]->(),
EDGE Joins ()-[{memberNo uint32}]->()
} PARTITION BY HASH(Crc32) SHARDS [1]
INSERT (rowlock:User {_id: 'U01', name: 'rowlock'}),
(brainy:User {_id: 'U02', name: 'Brainy'}),
(purplechalk:User {_id: 'U03', name: 'purplechalk'}),
(mochaeach:User {_id: 'U04', name: 'mochaeach'}),
(lionbower:User {_id: 'U05', name: 'lionbower'}),
(c01:Club {_id: 'C01'}),
(c02:Club {_id: 'C02'}),
(rowlock)-[:Follows]->(brainy),
(mochaeach)-[:Follows]->(brainy),
(purplechalk)-[:Follows]->(mochaeach),
(purplechalk)-[:Follows]->(lionbower),
(brainy)-[:Joins {memberNo: 1}]->(c01),
(lionbower)-[:Joins {memberNo: 2}]->(c01),
(mochaeach)-[:Joins {memberNo: 9}]->(c02)
基本用法
本查询返回是是C01
的成员,同时被U03
关注的用户:
MATCH ({_id: "C01"})<-[:Joins]-(u1:User)
RETURN u1
NEXT
MATCH ({_id: "U03"})-[:Follows]->(u2:User)
WHERE u2 = u1
RETURN u2
结果:u2
_id | _uuid | schema | values |
---|---|---|---|
U05 | Sys-gen | User | {name: "lionbower"} |
本查询报错,因为变量name
超出作用域:
LET name = "rowlock"
RETURN name
NEXT
MATCH ({_id: "C01"})<-[:Joins]-(u:User)
RETURN u
NEXT
RETURN name IN collect_list(u.name)
使用分组结果
本查询返回会员数最多的俱乐部中各用户的名字:
MATCH (c:Club)<-[:Joins]-()
RETURN c, count(c) AS cnt GROUP BY c
ORDER BY cnt DESC LIMIT 1
NEXT
MATCH (c)<-[:Joins]-(u)
RETURN c._id, collect_list(u.name)
结果:
c._id | collect_list(u.name) |
---|---|
C01 | ["Brainy","lionbower"] |
使用聚合结果
本查询插入从U01
指向C01
的Joins
边,并将memberNo
属性设为下一个最大值:
MATCH ({_id: "C01"})<-[e1:Joins]-()
RETURN max(e1.memberNo) AS maxNo
NEXT
MATCH (u {_id: "U01"}), (c {_id: "C01"})
INSERT (c)<-[e2:Joins {memberNo: maxNo + 1}]-(u)
RETURN e2
结果:e2
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
values |
---|---|---|---|---|---|---|
Sys-gen | U01 | C01 | UUID of U01 | UUID of C01 | Joins | {memberNo: 3} |
NEXT YIELD
YIELD
从句用于在前一条查询中选择并重命名(如果需要)变量,允许下一个查询继续使用它们;未被选择的变量将不再可用。忽略YIELD
从句时,默认前一条查询的所有变量继续传递到下一条查询。
本查询返回purplechalk
关注的用户所在的社团:
LET name = "purplechalk"
MATCH (:User {name: name})-[:Follows]->(u:User)
RETURN *
NEXT YIELD u
MATCH (u)-[:Joins]->(c:Club)
RETURN u.name, c._id
结果:
u.name | c._id |
---|---|
mochaeach | C02 |
lionbower | C01 |