概述
嬴图GQL使用@
符号引用图集中定义的点、边schema,格式为@<schema>
,例如@user。
引用图集中定义的点、边属性时:
@<schema>.<property>
的格式引用指定schema的指定属性,例如@user.age,一般在点或边的过滤器中使用。<alias>.<property>
的格式引用指定别名的指定属性,例如n.age。由于只有点和边具有属性,因此<alias>
的数据类型只能为NODE或EDGE。<property>
的格式不限schema引用属性,例如age,一般在点或边的过滤器中使用。
@<schema>.<property>
的格式不适用于唯一标识符属性_id
和_uuid
,因为这两个属性不隶属于任何schema。
例如,要查询_uuid
为123的@transfer边,过滤器应写为{_uuid == 123},写成{@transfers._uuid==123}会报错。
示例
示例图集
![](https://img.ultipa.cn/draw/draw_060a6c5dfe884a59bce022892f28fa5f.jpg?v='')
在一个空图集中,依次运行以下各行语句创建示例图集:
create().node_schema("professor").node_schema("student")
create().node_property(@*, "age", int32).node_property(@*, "email", string)
insert().into(@professor).nodes([{_id:"P001",_uuid:1,age:53,email:"test@yahoo.cn"},{_id:"P002",_uuid:2,age:27,email:"test@ultipa.com"}])
insert().into(@student).nodes([{_id:"S001",_uuid:3,age:27,email:"test@yeah.net"},{_id:"S002",_uuid:4,age:20,email:"test@w3.org"},{_id:"S003",_uuid:5,age:25,email:"test@gmail.com"}])
过滤Schema
本例查询@student点:
find().nodes({@student}) as n
return n{*}
|---------------- @student ---------------|
| _id | _uuid | age | email |
|-------|-------|-------|-----------------|
| S001 | 3 | 27 | test@yeah.net |
| S002 | 4 | 20 | test@w3.org |
| S003 | 5 | 25 | test@gmail.com |
过滤器{@student}
等效于{this.@ == "student"}
。
过滤Schema与属性值
本例查询age属性值为27的@student点:
find().nodes({@student.age == 27}) as n
return n{*}
|---------------- @student ---------------|
| _id | _uuid | age | email |
|-------|-------|-------|-----------------|
| S001 | 3 | 27 | test@yeah.net |
过滤器{@student.age == 27}
等效于{@student && age == 27}
。
过滤属性值
本例查询所有拥有age属性且值为27的点:
find().nodes({age == 27}) as n
return n{*}
|---------------- @student ---------------|
| _id | _uuid | age | email |
|-------|-------|-------|-----------------|
| S001 | 3 | 27 | test@yeah.net |
|--------------- @professor --------------|
| _id | _uuid | age | email |
|-------|-------|-------|-----------------|
| P002 | 2 | 27 | test@ultipa.com |
使用别名调用Schema和属性
本例查询所有点,将它们的schema和age属性值组装成表格后返回:
find().nodes() as n
return table(n.@, n.age)
| n.@ | n.age |
|--------|--------|
| professor | 53 |
| professor | 27 |
| student | 27 |
| student | 20 |
| student | 25 |