本节为您介绍如何使用Connection
对象的方法管理图集中点和边的schema与属性。
每个示例主要展示如何使用所列方法。点击完整示例查看完整代码示例。
Schema
ShowSchema()
从当前图集获取全部点、边的schema信息。
参数:
RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
[]Schema
:当前图集全部schema列表。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam的所有schema并打印schema的类型和名称
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
mySchema, _ := conn.ShowSchema(requestConfig)
for _, item := range mySchema {
fmt.Print("Schema name:", item.Name, " Schema type:", item.Type, "\n")
}
Schema name:default Schema type:node
Schema name:member Schema type:node
Schema name:organization Schema type:node
Schema name:default Schema type:edge
Schema name:reportsTo Schema type:edge
Schema name:relatesTo Schema type:edge{ Name: 'relatesTo', dbType: 'DBEDGE' }
]
GetSchema()
从当前图集获取一个点schema或一个边schema。
参数:
string
:schema名称。ultipa.DBType
:schema类型(点schema或边schema)。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Schema
:目标schema。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam中名为member的点schema和名为connectsTo的边schema,并打印其信息
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
nodeSchema, _ := conn.GetSchema("member", ultipa.DBType_DBNODE, requestConfig)
if nodeSchema != nil {
println("Name:", nodeSchema.Name, "Type:", nodeSchema.Type+" schema", " Number:", nodeSchema.Total)
} else {
println("Not exists")
}
edgeSchema, _ := conn.GetSchema("connectsTo", ultipa.DBType_DBEDGE, requestConfig)
if edgeSchema != nil {
println("Name:", edgeSchema.Name, "Type:", edgeSchema.Type+" schema", " Number:", edgeSchema.Total)
} else {
println("Not exists")
}
Name: member Type: node schema Number: 7
Not exists
ShowNodeSchema()
获取当前图集的全部点schema。
参数:
RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
[]Schema
:当前图集全部点schema列表。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam的全部点schema并打印其名称
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
nodeSchema, _ := conn.ShowNodeSchema(requestConfig)
for _, item := range nodeSchema {
println(item.Name)
}
default
member
organization
ShowEdgeSchema()
获取当前图集的全部边schema。
参数:
RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
[]Schema
:当前图集的全部边schema列表。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam的全部边schema并打印其名称
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
edgeSchema, _ := conn.ShowEdgeSchema(requestConfig)
for _, item := range edgeSchema {
println(item.Name)
}
default
reportsTo
relatesTo
GetNodeSchema()
获取当前图集的一个点schema。
参数:
string
:schema名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Schema
:目标点schema。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam中名为member的点schema并打印其属性信息
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
mySchema, _ := conn.GetNodeSchema("member", requestConfig)
println(utils.ToJSONString(mySchema.Properties))
[{"Name":"title","Desc":"","Lte":false,"Read":false,"Write":false,"Schema":"member","Type":7,"SubTypes":null,"Extra":"{}","Encrypt":""},{"Name":"profile","Desc":"","Lte":false,"Read":false,"Write":false,"Schema":"member","Type":7,"SubTypes":null,"Extra":"{}","Encrypt":""},{"Name":"age","Desc":"","Lte":false,"Read":false,"Write":false,"Schema":"member","Type":1,"SubTypes":null,"Extra":"{}","Encrypt":""}]
GetEdgeSchema()
获取当前图集的一个边schema。
参数:
string
:schema名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Schema
:目标边schema。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam中名为relatesTo的边schema并打印其属性信息
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
mySchema, _ := conn.GetEdgeSchema("relatesTo", requestConfig)
println(utils.ToJSONString(mySchema.Properties))
[{"Name":"type","Desc":"","Lte":false,"Read":false,"Write":false,"Schema":"relatesTo","Type":7,"SubTypes":null,"Extra":"{}","Encrypt":""}]
CreateSchema()
在当前图集新建一个schema。
参数:
Schema
:要创建的schema;字段Name
和DBType
必须设置,Desc
(描述的缩写)和Properties
是可选的。bool
:是否创建属性,默认为false
。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Response
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
// 在图集UltipaTeam中新建名为utility的点schema(包含属性),并打印其全部信息。
newNodeSchema, _ := conn.CreateSchema(&structs.Schema{Name: "utility", Properties: []*structs.Property{{Name: "name", Type: ultipa.PropertyType_STRING}, {Name: "purchaseDate", Type: ultipa.PropertyType_DATETIME}}, DBType: ultipa.DBType_DBNODE, Desc: "Office utilities"}, true, requestConfig)
println("Node Schema Creation Succeeds: ", newNodeSchema.Status.IsSuccess())
println(utils.JSONString(newNodeSchema))
// 在图集UltipaTeam中新建名为managedBy(不包含属性)的边schema并打印其全部信息
newEdgeSchema, _ := conn.CreateSchema(&structs.Schema{Name: "managedBy", DBType: ultipa.DBType_DBEDGE}, false, requestConfig)
println("Edge Schema Creation Succeeds: ", newEdgeSchema.Status.IsSuccess())
println(utils.JSONString(newEdgeSchema))
Node Schema Creation Succeeds: true
{"DataItemMap":{},"Reply":{"status":{},"statistics":{"table_name":"statistics","headers":[{"property_name":"node_affected","property_type":7},{"property_name":"edge_affected","property_type":7},{"property_name":"total_time_cost","property_type":7},{"property_name":"engine_time_cost","property_type":7}],"table_rows":[{"values":["MA==","MA==","MA==","MA=="]}]},"explain_plan":{}},"Status":{"Message":"","Code":0},"Statistic":{"NodeAffected":0,"EdgeAffected":0,"TotalCost":0,"EngineCost":0},"ExplainPlan":{"Explain":[]},"AliasList":null,"Resp":{"ClientStream":{}}}
Edge Schema Creation Succeeds: true
{"DataItemMap":{},"Reply":{"status":{},"statistics":{"table_name":"statistics","headers":[{"property_name":"node_affected","property_type":7},{"property_name":"edge_affected","property_type":7},{"property_name":"total_time_cost","property_type":7},{"property_name":"engine_time_cost","property_type":7}],"table_rows":[{"values":["MA==","MA==","MA==","MA=="]}]},"explain_plan":{}},"Status":{"Message":"","Code":0},"Statistic":{"NodeAffected":0,"EdgeAffected":0,"TotalCost":0,"EngineCost":0},"ExplainPlan":{"Explain":[]},"AliasList":null,"Resp":{"ClientStream":{}}}
CreateSchemaIfNotExist()
在当前图集新建一个schema,若同名schema已存在,忽略报错。
参数:
Schema
:待创建的schema;必须设置Name
字段和DBType
字段,Desc
字段和Properties
字段可选。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
bool
:该Schema是否已经存在。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
// 在图集UltipaTeam中新建一个schema并打印创建是否发生
cre1, _ := conn.CreateSchemaIfNotExist(&structs.Schema{Name: "utility", DBType: ultipa.DBType_DBNODE, Desc: "Office utilities"}, requestConfig)
println("Schema already exists: ", cre1)
// 再次创建相同的schema,并在schema已存在时打印提示。
cre2, _ := conn.CreateSchemaIfNotExist(&structs.Schema{Name: "utility", DBType: ultipa.DBType_DBNODE, Desc: "Office utilities"}, requestConfig)
println("Schema already exists: ", cre2)
Schema already exists: false
Schema already exists: true
AlterSchema()
根据schema名称修改当前图集中某个schema的名称和描述。
参数:
Schema
:图集中待修改的schema;必须设置Name
字段和DBType
字段。Schema
:更新已有schema的配置;Name
和Desc
(描述的缩写)字段必须设置至少一个。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Response
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 将图集UltipaTeam中的一个点schema由utility改为securityUtility并删除其描述
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
resp, _ := conn.AlterSchema(&structs.Schema{Name: "utility", DBType: ultipa.DBType_DBNODE}, &structs.Schema{Name: "securityUtility"}, requestConfig)
println("Operation succeeds:", resp.Status.IsSuccess())
Operation succeeds: true
DropSchema()
根据schema名称从当前图集删除某个schema。
参数:
Schema
:图集中待删除的schema;必须设置Name
字段和DBType
字段。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Response
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 在图集UltipaTeam中删除名为utility的点schema
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
resp, _ := conn.DropSchema(&structs.Schema{Name: "utility", DBType: ultipa.DBType_DBNODE}, requestConfig)
println("Operation succeeds:", resp.Status.IsSuccess())
Operation succeeds: true
Property
ShowProperty()
获取当前图集的自定义点属性信息或边属性信息。
参数:
DBType
:属性类型(点属性或边属性)。string
:schema名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
[]Property
:当前图集全部目标属性列表。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam的的所有点属性,并打印其名称和关联的schema
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
resp, _ := conn.ShowNodeSchema(requestConfig)
for _, item := range resp {
proList, _ := conn.ShowProperty(ultipa.DBType_DBNODE, item.Name, requestConfig)
for _, pro := range proList {
println(pro.Name, "is associated with schema named", item.Name)
}
}
title is associated with schema named member
profile is associated with schema named member
age is associated with schema named member
name is associated with schema named organization
logo is associated with schema named organization
ShowNodeProperty()
获取当前图集的自定义点属性信息。
参数:
string
:schema名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
[]Property
:当前图集全部目标属性列表。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam中名为member的点schema其关联的所有自定义点属性信息,并打印属性数量
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
myCount, _ := conn.ShowNodeProperty("member", requestConfig)
println(len(myCount))
3
ShowEdgeProperty()
获取当前图集的自定义边属性信息。
参数:
string
:schema名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
[]Property
:当前图集全部目标属性列表。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam中名为relatesTo的边schema其关联的所有自定义边属性,并打印属性名称
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
myEdge, _ := conn.ShowEdgeProperty("relatesTo", requestConfig)
if myEdge != nil {
for _, item := range myEdge {
println(item.Name)
}
} else {
println("No property")
}
type
GetProperty()
获取当前图集的一个自定义点属性或边属性。
参数:
DBType
:属性类型(点属性或边属性)。string
:schema名称。string
:属性名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Property
:目标属性。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam的点属性@member.title,并打印其全部信息
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
proInfo, _ := conn.GetProperty(ultipa.DBType_DBNODE, "member", "title", requestConfig)
println(utils.ToJSONString(proInfo))
{"Name":"title","Desc":"","Lte":false,"Read":false,"Write":false,"Schema":"member","Type":7,"SubTypes":null,"Extra":"{}","Encrypt":""}
GetNodeProperty()
获取当前图集的一个自定义点属性。
参数:
string
:schema名称。string
:属性名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Property
:目标属性。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam的点属性@member.title,并打印其全部信息
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
proInfo, _ := conn.GetNodeProperty("member", "title", requestConfig)
println(utils.ToJSONString(proInfo))
{"Name":"title","Desc":"","Lte":false,"Read":false,"Write":false,"Schema":"member","Type":7,"SubTypes":null,"Extra":"{}","Encrypt":""}
GetEdgeProperty()
获取当前图集的一个自定义边属性。
参数:
string
:schema名称。string
:属性名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Property
:目标属性。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集UltipaTeam的边属性@relatesTo.type,并打印其全部信息
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
proInfo, _ := conn.GetEdgeProperty("relatesTo", "type", requestConfig)
println(utils.ToJSONString(proInfo))
{"Name":"type","Desc":"","Lte":false,"Read":false,"Write":false,"Schema":"relatesTo","Type":7,"SubTypes":null,"Extra":"{}","Encrypt":""}
CreateProperty()
在当前图集为点schema或边schema创建一个属性。
参数:
DBType
:属性类型(点属性或边属性)。string
:要创建的属性;必须设置Name
和Type
字段。Property
:要创建的属性;必须设置Name
和Type
字段;RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Response
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 在图集UltipaTeam中为名为member的点schema创建两个属性并打印错误代码
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
prop1 := &structs.Property{Name: "startDate", Type: ultipa.PropertyType_DATETIME}
new1, _ := conn.CreateProperty(ultipa.DBType_DBNODE, "member", prop1, requestConfig)
println("Operation succeeds:", new1.Status.IsSuccess())
prop2 := &structs.Property{Name: "age", Type: ultipa.PropertyType_INT32}
new2, _ := conn.CreateProperty(ultipa.DBType_DBNODE, "member", prop2, requestConfig)
println("Operation succeeds:", new2.Status.IsSuccess())
Operation succeeds: true
Operation succeeds: true
CreatePropertyIfNotExist()
在当前图集为某个点schema或边schema新建一个属性,若同名属性已存在,忽略报错。
参数:
DBType
:属性类型(点属性或边属性)。string
:要创建的属性;必须设置Name
和Type
字段。Property
:要创建的属性;必须设置Name
和Type
字段。RequestConfig
(可选):配置请求。如果填入nil
,函数将使用默认的配置。
返回值:
bool
:该属性是否已经存在。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
//为图集UltipaTeam中为名为member的点schema创建一个属性,并打印该schema是否已存在
myProp := &structs.Property{Name: "startDate", Type: ultipa.PropertyType_DATETIME}
new1, _ := conn.CreatePropertyIfNotExist(ultipa.DBType_DBNODE, "member", myProp, requestConfig)
println("Property already exists:", new1)
// 在图集UltipaTeam中再次创建同个属性,并打印该schema是否已存在
new2, _ := conn.CreatePropertyIfNotExist(ultipa.DBType_DBNODE, "member", myProp, requestConfig)
println("Property already exists:", new2)
Property already exists: false
Property already exists: true
AlterProperty()
根据属性名称修改当前图集中某个自定义属性的名称和描述。
参数:
DBType
:属性类型(点属性或边属性)。Property
:图集中待修改的属性;必须设置name
字段和schema
字段(可用*
指定全部schema)。Property
:更新已有属性的配置;对于Name
字段和Desc
字段,必须至少设置其中一个字段。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Response
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
//将图集UltipaTeam中全部点schema下的name属性改为Name
myAlt, _ := conn.AlterProperty(ultipa.DBType_DBNODE, &structs.Property{Name: "name", Schema: "*"}, &structs.Property{Name: "Name"}, requestConfig)
println("Operation succeeds:", myAlt.Status.IsSuccess())
Operation succeeds: true
DropProperty()
根据属性名称和关联schema从当前图集删除某自定义属性。
参数:
DBType
:属性类型(点属性或边属性)。string
:schema名称。string
:属性名称。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Response
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
// 删除图集UltipaTeam中与全部点schema关联的startDate属性,并打印错误代码
drop1, _ := conn.DropProperty(ultipa.DBType_DBNODE, "*", "startDate", requestConfig)
println("Operation succeeds:", drop1.Status.IsSuccess())
// 删除图集UltipaTeam的点属性@member.name,并打印错误代码
drop2, _ := conn.DropProperty(ultipa.DBType_DBNODE, "member", "name", requestConfig)
println("Operation succeeds:", drop2.Status.IsSuccess())
Operation succeeds: true
Operation succeeds: true
完整示例
package main
import (
ultipa "github.com/ultipa/ultipa-go-sdk/rpc"
"github.com/ultipa/ultipa-go-sdk/sdk"
"github.com/ultipa/ultipa-go-sdk/sdk/configuration"
"github.com/ultipa/ultipa-go-sdk/sdk/structs"
"github.com/ultipa/ultipa-go-sdk/utils"
)
func main() {
// 设置连接
// URI示例: Hosts:=[]string{"mqj4zouys.us-east-1.cloud.ultipa.com:60010"}
config, _ := configuration.NewUltipaConfig(&configuration.UltipaConfig{
Hosts: []string{"192.168.1.85:60061", "192.168.1.86:60061", "192.168.1.87:60061"},
Username: "***",
Password: "***",
})
// 建立与数据库的连接
conn, _ := sdk.NewUltipa(config)
// 配置请求
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "UltipaTeam",
}
// 在图集UltipaTeam中新建名为utility的点schema(同时创建属性)并打印错误代码
newNodeSchema, _ := conn.CreateSchema(&structs.Schema{Name: "utility", Properties: []*structs.Property{{Name: "name", Type: ultipa.PropertyType_STRING}, {Name: "purchaseDate", Type: ultipa.PropertyType_DATETIME}}, DBType: ultipa.DBType_DBNODE, Desc: "Office utilities"}, true, requestConfig)
println("Node Schema Creation Succeeds: ", newNodeSchema.Status.IsSuccess())
println(utils.JSONString(newNodeSchema))
}