映射方法
Response类的Get()方法或Alias()方法返回一个DataItem,内嵌在查询结果中。您需使用DataItem的As<Type>()方法将结果转换成合适的驱动类型。
myQuery, _ := conn.Uql("find().nodes() as n return n{*} limit 5", requestConfig)
nodeList, schemaList, _ := myQuery.Alias("n").AsNodes()
printers.PrintNodes(nodeList, schemaList)
从数据库返回的结果n包含5个节点,均为NODE类型。AsNodes()方法将这些节点转换成Node列表。
DataItem的类型映射方法:
| UQL类型 | UQL别名 | 方法 | 驱动类型 | 描述 |
|---|---|---|---|---|
| NODE | Any | AsNodes() |
[]Node | 将NODE类型的DataItem映射为Node对象的列表 |
| NODE | Any | AsFirstNode() |
Node | 将NODE类型的DataItem中的第一个节点映射为一个Node对象 |
| EDGE | Any | AsEdges() |
[]Edge | 将EDGE类型的DataItem映射为Edge对象的列表 |
| EDGE | Any | AsFirstEdge() |
Edge | 将EDGE类型的DataItem中的第一条边映射为一个Edge对象 |
| PATH | Any | AsPaths() |
Path[] | 将PATH类型的DataItem映射为Path对象的列表 |
| GRAPH | Any | AsGraph() |
Graph | 将GRAPH类型的DataItem映射为一个Graph对象 |
| TABLE | _graph |
AsGraphSets() |
[]GraphSet | 将别名为_graph的DataItem映射为GraphSet对象的列表 |
| TABLE | _nodeSchema, _edgeSchema |
AsSchemas() |
[]Schema | 将别名为_nodeSchema或_edgeSchema的DataItem映射为Schema对象的列表 |
| TABLE | _nodeProperty, _edgeProperty |
AsProperties() |
[]Property | 将别名为_nodeProperty或_edgeProperty的DataItem映射为Property对象的列表 |
| TABLE | _algoList |
AsAlgos() |
[]Algo | 将别名为_algoList的DataItem映射为Algo对象的列表 |
| TABLE | _extaList |
AsExtas() |
[]Exta | 将别名为_extaList的DataItem映射为Exta对象的列表 |
| TABLE | _nodeIndex, _edgeIndex |
AsIndexes() |
[]Index | 将别名为_nodeIndex或_edgeIndex的DataItem映射为Index对象的列表 |
| TABLE | _nodeFulltext, _edgeFulltext |
AsFullTexts() |
[]Index | 将别名为_nodeFulltext或_edgeFulltext的DataItem映射为Index对象的列表 |
| TABLE | _privilege |
AsPriviliege() |
[]Priviliege | 将别名为_privilege的DataItem映射为Priviliege对象 |
| TABLE | _policy |
AsPolicies() |
[]Policy | 将别名为_policy的DataItem映射为Policy对象的列表 |
| TABLE | _user |
AsUsers() |
[]User | 将别名为_user的DataItem映射为User对象的列表 |
| TABLE | _statistic |
AsStats() |
Stat | 将别名为_statistic的DataItem映射为一个Stat对象 |
| TABLE | _top |
AsTops() |
[]Top | 将别名为_top的DataItem映射为Process对象的列表 |
| TABLE | _task |
AsTasks() |
[]Task | 将别名为_task的DataItem映射为Task对象的列表 |
| TABLE | Any | AsTable() |
Table | 将TABLE类型的DataItem映射为一个Table对象 |
| ATTR | Any | AsAttr() |
Attr | 将ATTR类型的DataItem映射为一个Attr对象 |
驱动类型
所有驱动类型的对象均支持使用getter方法获取字段值,以及使用setter方法设定字段值,即便这些对象并未在下文中明确列出。
Node
Node对象包含以下字段:
| 字段 | 类型 | 描述 |
|---|---|---|
Name |
string | 别名 |
ID |
string | 点的ID |
UUID |
uint64 | 点的UUID |
Schema |
string | 点的schema |
Values |
object | 点的自定义属性 |
作用在Node对象上的方法:
方法 |
返回值 |
描述 |
|---|---|---|
get("<propertyName>") |
Object | 获取点的指定自定义属性的值. |
set("<propertyName>", <propertyValue> |
设置点的指定自定义属性的值;若指定的<propertyName>不存在,则为点的Values增加一个键值对 |
myQuery, _ := conn.Uql("find().nodes() as n return n{*} limit 5", requestConfig)
nodeList, _, _ := myQuery.Alias("n").AsNodes()
println("ID of the 1st node:", nodeList[0].GetID())
println("Name of the 1st node:", nodeList[0].GetSchema())
ID of the 1st node: ULTIPA8000000000000001
Name of the 1st node: account
Edge
Edge对象包含以下字段:
| 字段 | 类型 | 描述 |
|---|---|---|
Name |
string | 别名 |
From |
string | 边的起点的ID |
To |
string | 边的终点的ID |
FromUUID |
uint64 | 边的起点的UUID |
ToUUID |
uint64 | 边的终点的UUID |
UUID |
uint64 | 边的UUID |
Schema |
string | 边的Schema |
values |
object | 边的自定义属性 |
作用在Edge对象上的方法:
方法 |
返回值 |
描述 |
|---|---|---|
get("<propertyName>") |
Object | 获取边的指定自定义属性的值 |
set("<propertyName>", <propertyValue> |
设置边的指定自定义属性的值;若指定的<propertyName>不存在,则为边的values增加一个键值对 |
myQuery, _ := conn.Uql("find().edges() as e return e{*} limit 5", requestConfig)
edgeList, _ := myQuery.Alias("e").AsFirstEdge()
println("Values of the 1st edge:", utils.JSONString(edgeList.GetValues()))
Values of the 1st edge: {"Data":{"datetime":{"Datetime":1847052190913396736,"Year":2019,"Month":1,"Day":6,"Hour":2,"Minute":57,"Second":57,"Macrosec":0,"Time":"2019-01-06T02:57:57Z"},"targetPost":703,"timestamp":{"Datetime":1847052190913396736,"Year":2019,"Month":1,"Day":6,"Hour":2,"Minute":57,"Second":57,"Macrosec":0,"Time":"2019-01-06T02:57:57+08:00"}}}
Path
Path对象包含以下字段:
| 字段 | 类型 |
描述 |
|---|---|---|
Name |
string | 别名 |
Nodes |
[]Node | 路径中的Node列表 |
Edges |
[]Edge | 路径中的Edge列表 |
NodeSchemas |
object | 路径中全部点schema的映射 |
EdgeSchemas |
object | 路径中全部边schema的映射 |
myQuery, _ := conn.Uql("n().e()[:2].n() as paths return paths{*} limit 5", requestConfig)
pathList, _ := myQuery.Alias("paths").AsPaths()
println("Length of the 1st path:", pathList[0].GetLength())
println("Edge list of the 1st path:", "\n", utils.JSONString(pathList[0].GetEdges()))
println("Information of the 2nd node in the 1st path:", "\n", utils.JSONString(pathList[0].GetNodes()[1]))
Length of the 1st path: 2
Edge list of the 1st path:
[{"Name":"paths","From":"u_10032","To":"u_105","FromUUID":27,"ToUUID":1,"UUID":2784,"Schema":"follow","Values":{"Data":{}}},{"Name":"paths","From":"u_10071","To":"u_10032","FromUUID":33,"ToUUID":27,"UUID":2876,"Schema":"follow","Values":{"Data":{}}}]
Information of the 2nd node in the 1st path:
{"Name":"paths","ID":"u_10032","UUID":27,"Schema":"account","Values":{"Data":{"birthYear":1988,"fRate":null,"gender":"male","industry":"Transportation","name":"floatingnote","new":null,"new1":null,"new2":null,"records":null,"tags":null}}}
Graph
Graph对象包含以下字段:
| 字段 | 类型 |
描述 |
|---|---|---|
Name |
string | 别名 |
Nodes |
[]Node | 路径中的Node列表 |
Edges |
[]Edge | 路径中的Edge列表 |
NodeSchemas |
object | 路径中全部点schema的映射 |
EdgeSchemas |
object | 路径中全部边schema的映射 |
myQuery, _ := conn.Uql("n(as n1).re(as e).n(as n2).limit(3) with toGraph(collect(n1), collect(n2), collect(e)) as graph return graph", requestConfig)
resp, _ := myQuery.Alias("graph").AsGraph()
println("Node IDs:")
for _, item := range resp.Nodes {
println(item.ID)
}
println("Edge UUIDs:")
for _, item := range resp.Edges {
println(item.UUID)
}
Node IDs:
ad304833
u604131
ad534784
ad6880
Edge UUIDs:
363347
774098
527786
3
GraphSet
GraphSet对象包含以下字段:
字段 |
类型 | 描述 |
|---|---|---|
ID |
string | 图集ID |
Name |
string | 图集名称 |
Description |
string | 图集描述 |
TotalNodes |
string | 图集总点数 |
TotalEdges |
string | 图集总边数 |
Status |
string | 图集状态(已挂载 MOUNTED、挂载中 MOUNTING 或未挂载 UNMOUNTED) |
myQuery, _ := conn.Uql("show().graph()", nil)
resp, _ := myQuery.Alias("_graph").AsGraphSets()
for _, item := range resp {
if item.Status == "UNMOUNTED" {
println(item.Name)
}
}
DFS_EG
cyber
cyber2
Schema
Schema对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | Schema名称 |
Properties |
[]Property | Schema属性列表 |
Desc |
string | Schema描述 |
Type |
string | Schema类型(点或边) |
DBType |
DBType | Schema数据库类型(点或边) |
Total |
int | Schema中点/边的总数量 |
myQuery, _ := conn.Uql("show().node_schema()", requestConfig)
resp, _ := myQuery.Alias("_nodeSchema").AsSchemas()
for _, item := range resp {
println(item.Name, "has", item.Total, "nodes")
}
default has 0 nodes
user has 1092511 nodes
ad has 846811 nodes
Property
Property对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | 属性名称 |
Desc |
string | 属性描述 |
Lte |
bool | 属性的LTE状态 |
Schema |
string | 属性关联的Schema |
Type |
PropertyType | 属性数据类型 |
SubTypes |
[]PropertyType | 属性数据类型列表 |
Extra |
string | 属性的额外信息 |
myQuery, _ := conn.Uql("show().node_property(@user)", requestConfig)
resp, _ := myQuery.Alias("_nodeProperty").AsProperties()
for _, item := range resp {
if item.Lte {
println("LTE-ed property name:", item.Name)
}
}
LTE-ed property name: occupation
Algo
Algo对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | 算法名称 |
Desc |
string | 算法描述 |
Version |
string | 算法版本 |
Params |
object | 算法的参数 |
myQuery, _ := conn.Uql("show().algo()", requestConfig)
resp, _ := myQuery.Alias("_algoList").AsAlgos()
println(utils.JSONString(resp[0]))
{"Name":"bipartite","Desc":"bipartite check","Version":"1.0.1","Params":{}}
Exta
Exta是由用户开发的自定义算法。
Exta对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | Exta名称 |
Author |
string | Exta作者 |
Version |
string | Exta版本 |
Detail |
string | Exta的YML配置文件内容 |
myQuery, _ := conn.Uql("show().exta()")
resp, _ := myQuery.Alias("_extaList").AsExtas()
println("Exta name:", utils.JSONString(resp[0].Name))
Exta name: "page_rank"
Index
Index对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | 索引名称 |
Properties |
string | 索引的属性名称 |
Schema |
string | 索引的schema名称 |
Status |
string | 索引状态,包括done和creating |
Size |
string | 索引大小(字节) |
Type |
string | 索引类型,包括DBNODE和DBEDGE |
myQuery, _ := conn.Uql("show().index()", requestConfig)
resp, _ := myQuery.Alias("_nodeIndex").AsIndexes()
for i := 0; i < len(resp); i++ {
println("Schema name:", resp[i].Schema)
println("Properties:", resp[i].Properties)
println("Size:", resp[i].Size)
}
Schema name: user
Properties: shopping_level
Size: 4608287
Schema name: ad
Properties: price
Size: 7828760
Full-text
一个 FullText 对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | 索引名称 |
Properties |
string | 索引的属性名称 |
Schema |
string | 索引的schema名称 |
Status |
string | 索引状态,包括done和creating) |
Size |
string | 索引大小(以字节为单位) |
Type |
string | 索引类型,包括DBNODE和DBEDGE |
myQuery, _ := conn.Uql("show().fulltext()", requestConfig)
resp, _ := myQuery.Alias("_edgeFulltext").AsFullTexts()
for i := 0; i < len(resp); i++ {
println("Fulltext name:", resp[i].Name)
println("Schema name:", resp[i].Schema)
println("Properties:", resp[i].Properties)
}
Fulltext name: nameFull
Schema name: review
Properties: content
Privilege
Privilege对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
GraphPrivileges |
[]string | 图权限 |
SystemPrivileges |
[]string | 系统权限 |
myQuery, _ := conn.Uql("show().privilege()", requestConfig)
resp, _ := myQuery.Alias("_privilege").AsPrivilege()
println(utils.JSONString(resp[0].SystemPrivileges))
["TRUNCATE","COMPACT","CREATE_GRAPH","SHOW_GRAPH","DROP_GRAPH","ALTER_GRAPH","MOUNT_GRAPH","UNMOUNT_GRAPH","TOP","KILL","STAT","SHOW_POLICY","CREATE_POLICY","DROP_POLICY","ALTER_POLICY","SHOW_USER","CREATE_USER","DROP_USER","ALTER_USER","GRANT","REVOKE","SHOW_PRIVILEGE"]
Policy
Policy对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | 策略名称 |
GraphPrivileges |
GraphPrivileges | 策略中的图权限和对应图集 |
SystemPrivileges |
[]string | 策略中的系统权限 |
PropertyPrivileges |
PropertyPrivileges | 策略中的属性权限 |
Policies |
[]string | 策略中的策略 |
myQuery, _ := conn.Uql("show().policy()", requestConfig)
resp, _ := myQuery.Alias("_policy").AsPolicies()
for i := 0; i < len(resp); i++ {
println(resp[i].Name)
}
operator
manager
User
User对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Username |
string | 用户名 |
Password |
string | 密码 |
Create |
string | 用户创建时间 |
GraphPrivileges |
GraphPrivileges | 授予用户的图权限和对应图集 |
SystemPrivileges |
[]string | 授予用户的系统权限 |
Policies |
[]string | 授予用户的策略 |
PropertyPrivileges |
PropertyPrivileges | 授予用户的属性权限 |
myQuery, _ := conn.Uql("show().user('Tester')", requestConfig)
resp, _ := myQuery.Alias("_user").AsUsers()
println("Username:", resp[0].UserName)
println("Created at:", resp[0].Create)
println("Graph privileges:", utils.JSONString(resp[0].GraphPrivileges))
println("System privileges:", utils.JSONString(resp[0].SystemPrivileges))
println("Property privileges:", utils.JSONString(resp[0].PropertyPrivileges))
Username: Tester
Created at: 1970-01-01 08:00:00
Graph privileges: {"Ad_Click":["FIND_EDGE","FIND_NODE"],"DFS_EG":["UPDATE","INSERT"]}
System privileges: ["MOUNT_GRAPH"]
Property privileges: {"edge":{"deny":[],"read":[],"write":[]},"node":{"deny":[],"read":[],"write":[["miniCircle","account","name"]]}}
Stats
Stats对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
CPUUsage |
string | CPU使用百分比 |
MemUsage |
string | 内存使用量(兆字节) |
ExpiredDate |
string | 许可证过期日期 |
CPUCores |
string | CPU核数 |
Company |
string | 公司名称 |
ServerType |
string | 服务器类型 |
Version |
string | 服务器版本 |
myQuery, _ := conn.Uql("stats()", requestConfig)
resp, _ := myQuery.Alias("_statistic").AsStats()
println("CPU usage::", resp.CPUUsage, "%")
println("Memory usage:", resp.MemUsage, "%")
CPU usage: 16.926739 %
Memory usage: 11558.082031 %
Process
Process对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
ProcessId |
string | 进程ID |
Status |
string | 进程状态 |
ProcessUql |
string | 与进程一起运行的UQL |
Duration |
string | 任务已运行时长,单位为秒 |
myQuery, _ := conn.Uql("top()", requestConfig)
resp, _ := myQuery.Alias("_top").AsTops()
println(resp[0].ProcessId)
a_5_15518_2
Task
Task对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Param |
object | 算法参数和对应值 |
TaskInfo |
TaskInfo | 任务信息包括TaskID,AlgoName,StartTime,TaskStatus等 |
ErrorMsg |
string | 任务的错误信息 |
Result |
object | 算法结果、统计数据及其对应值 |
myQuery, _ := conn.Uql("show().task()", requestConfig)
resp, _ := myQuery.Alias("_task").AsTasks()
println("Algo name:", resp[0].TaskInfo.AlgoName)
println("Parameters:", utils.JSONString(resp[0].Param))
println("Result:", utils.JSONString(resp[0].Result))
Algo name: louvain
Parameters: {"min_modularity_increase":"0.001","phase1_loop_num":"20"}
Result: {"community_count":"1228589","modularity":"0.635263","result_files":"communityID"}
Table
Table对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | 表格名称 |
Headers |
[]Property | 表头 |
Rows |
[]Row | 表格行 |
作用在Table对象上的方法:
方法 |
返回值 |
描述 |
|---|---|---|
ToKV() |
[]Values | 将表的所有行转换成键值列表 |
myQuery, _ := conn.Uql("find().nodes() as n return table(n._id, n._uuid) as myTable limit 5", requestConfig)
resp, _ := myQuery.Alias("myTable").AsTable()
println("2nd row in table:", utils.JSONString(resp.ToKV()[1]))
2nd row in table: {"Data":{"n._id":"u604510","n._uuid":2}}
Attr
Attr对象包含以下字段:
字段 |
类型 |
描述 |
|---|---|---|
Name |
string | 别名 |
PropertyType |
PropertyType | Attr类型 |
ResultType |
ResultType | Attr类型描述 |
Rows |
Row | Attr行 |
myQuery, _ := conn.Uql("find().nodes({@ad}) as n return n.brand limit 5", requestConfig)
resp, _ := myQuery.Alias("n.brand").AsAttr()
println(utils.JSONString(resp.Rows))
[14655,14655,14655,14655,434760]