概述
子图模板子句subgraph([<path_template1>, <path_template2>, ...])
使用多个路径模板来描述子图并进行查询。这些路径模板通过相交的点或边拼接在一起,相交关系是通过定义和调用点、边别名来体现的。
语法
- 子句别名:不支持
- 子图模板也不支持为其中的任何一个路径模板定义别名
示例
一个关联别名
本例构建的子图查找接收过顾客CU013和CU016转账的顾客,返回他们的全部信息:
subgraph([
n({_id == "CU013"}).re().n({@card}).re({@transfer}).n({@card} as n).le().n({@customer} as c),
n({_id == "CU016"}).re().n({@card}).re({@transfer}).n(n)
])
return c{*}
上例通过别名n将两条路径关联起来。
多个关联别名
本例构建的子图查找由3名不同顾客的银行卡形成的单一方向转账环路,返回这些的顾客全部信息:
subgraph([
n({@customer} as A1).re().n({@card} as C1),
n({@customer && _uuid < A1._uuid} as A2).re().n({@card} as C2),
n({@customer && _uuid < A2._uuid} as A3).re().n({@card} as C3),
n(C1).re().n(C2).re().n(C3).re().n(C1)
])
return A1{*}, A2{*}, A3{*}
上例通过别名C1、C2和C3将四条路径关联起来。
本例构建的子图查找使用了相同邮箱、手机号和设备两张银行卡,将两张银行卡的ID组装成表格后返回:
subgraph([
n({@card} as C1).e().n({@email}).e().n({@card && _uuid > C1._uuid} as C2),
n(C1 as C11).e().n({@phone}).e().n(C2 as C22),
n(C11).e().n({@device}).e().n(C22)
])
return table(C11._id, C22._id)
上例通过别名C1和C2将三条路径关联起来。要注意的是,多次调用一个别名时,需在每次调用后对该别名重新进行定义,如上例的第二个路径模板将C1重新定义为C11,C2重新定义为C22。