概述
使用语句WITH
可以对查询前期生成的数据进行操作,再将结果传递给后续查询。请注意,WITH
语句会影响别名的作用域。若别名未出现在WITH
语句中,则无法在后续查询中使用。
示例图集

在一个空图集中,逐行运行以下语句,创建示例图集:
create().node_schema("Student").node_schema("Course").edge_schema("Take")
create().node_property(@Student,"name").node_property(@Student,"gender").node_property(@Course,"name").node_property(@Course,"credit",int32)
insert().into(@Student).nodes([{_id:"s1", name:"Alex", gender:"male"}, {_id:"s2", name:"Susan", gender:"female"}])
insert().into(@Course).nodes([{_id:"c1", name:"Art", credit:13}, {_id:"c2", name:"Literature", credit:15}, {_id:"c3", name:"Maths", credit:14}])
insert().into(@Take).edges([{_from:"s1", _to:"c1"}, {_from:"s2", _to:"c1"}, {_from:"s2", _to:"c2"}, {_from:"s2", _to:"c3"}])
函数运算
查找Susan所上课程里,credit
最高的一门:
n({@Student.name == "Susan"} as s).re().n({@Course} as c1)
with max(c1.credit) as maxCredit
find().nodes({@Course.credit == maxCredit}) as c2
return c2.name
结果:
c2.name |
---|
Literature |
连接异源数据
本条查询意在判断图中每对学生和课程之间是否存在路径。请注意,WITH
语句对s
和c
执行了笛卡尔积操作,因此有6条记录生成。n().e().n()
语句随后执行6次,逐条处理每条记录。更多信息请参阅异源数据。
find().nodes({@Student}) as s
find().nodes({@Course}) as c
with s, c
optional n(s).e().n({_id == c._id}) as p
return p{*}
结果:p

构建数据
查找credit
大于target
的课程:
with 13 as target
find().nodes({@Course.credit > target}) as c
return c.name
结果:
c.name |
---|
Literature |
Maths |