子图模板 graph([<path_template1>, <path_template2>, ...])
使用多个路径模板来描述子图并进行查询。这些路径模板相交于点或边,并通过定义、调用点、边别名来体现相交关系。
子图模板不支持在 graph() 命令后定义语句别名,也不支持在 graph() 命令中每一个路径模板后定义别名。
一个关联别名
示例:参考下图所示的路径结构,查看接收过顾客 CU013、CU016 的转账的顾客,返回这些顾客且携带全部信息
graph([
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 个不同顾客的银行卡按照单一方向进行环路转账,返回这样的顾客组合
graph([
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 将四个路径进行关联。
示例:参考下图所示的路径结构,查询这样的银行卡信息:两个不同的银行卡使用了相同的邮箱、手机号、设备,返回这样的银行卡组合
graph([
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。