本节为您介绍如何使用Connection
对象的方法管理图集中点和边的schema与属性。
每个示例主要展示如何使用所列方法。点击完整示例查看完整代码示例。
Schema
showSchema()
从当前图集获取全部点、边的schema信息。
参数:
RequestConfig
(可选):配置请求。
返回值:
Schema[]
:当前图集全部schema列表。
// 获取图集UltipaTeam的所有schema并打印schema的类型和名称
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.showSchema(requestConfig);
const dataList = resp.data?.map((item) => ({
Name: item.name,
dbType: Number(item.totalNodes) >= 0 ? "DBNODE" : "DBEDGE",
}));
console.log(dataList);
[
{ Name: 'default', dbType: 'DBNODE' },
{ Name: 'member', dbType: 'DBNODE' },
{ Name: 'organization', dbType: 'DBNODE' },
{ Name: 'default', dbType: 'DBEDGE' },
{ Name: 'reportsTo', dbType: 'DBEDGE' },
{ Name: 'relatesTo', dbType: 'DBEDGE' }
]
getSchema()
从当前图集获取一个点schema或一个边schema。
参数:
string
:schema名称。ULTIPA.DBType
:schema类型(点schema 或边schema)。RequestConfig
(可选):配置请求。
返回值:
Schema
:目标schema。
// 获取图集UltipaTeam中名为member的点schema和名为connectsTo的边schema,并打印其信息
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let nodeInfo = await conn.getSchema(
"member",
ULTIPA.DBType.DBNODE,
requestConfig
);
console.log("NodeSchema: ", nodeInfo.data);
let edgeInfo = await conn.getSchema(
"connectsTo",
ULTIPA.DBType.DBEDGE,
requestConfig
);
console.log("EdgeSchema: ", edgeInfo.data);
{
NodeSchema: {
name: 'member',
description: '',
properties: [
{
name: 'name',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
},
{
name: 'title',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
},
{
name: 'profile',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
},
{
name: 'age',
type: 'int32',
description: '',
lte: 'false',
extra: '{}'
}
],
totalNodes: '7'
}
EdgeSchema: {}
showNodeSchema()
获取当前图集的全部点schema。
参数:
RequestConfig
(可选):配置请求。
返回值:
Schema[]
:当前图集全部点schema列表。
// 获取图集UltipaTeam的全部点schema并打印其名称
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let dataOri = await conn.showNodeSchema(requestConfig);
const schemaInfo = dataOri.data?.map((item) => item.name);
console.log("SchemaName: ", schemaInfo);
SchemaName: [ 'default', 'member', 'organization' ]
showEdgeSchema()
获取当前图集的全部边schema。
参数:
RequestConfig
(可选):配置请求。
返回值:
Schema[]
当前图集的全部边schema列表。
// 获取图集UltipaTeam的全部边schema并打印其名称
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let dataOri = await conn.showNodeSchema(requestConfig);
const schemaInfo = dataOri.data?.map((item) => item.name);
console.log("SchemaName: ", schemaInfo);
SchemaName: [ 'default', 'reportsTo', 'relatesTo']
getNodeSchema()
获取当前图集的一个点schema。
参数:
string
:schema名称。RequestConfig
(可选):配置请求。
返回值:
Schema
:目标点schema。
// 获取图集UltipaTeam中名为member的点schema并打印其属性信息
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.getNodeSchema("member", requestConfig);
console.log("Property: ", resp.data?.properties);
Property: [
{
name: 'name',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
},
{
name: 'title',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
},
{
name: 'profile',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
},
{
name: 'age',
type: 'int32',
description: '',
lte: 'false',
extra: '{}'
}
]
getEdgeSchema()
获取当前图集的一个边schema。
参数:
string
:schema名称。RequestConfig
(可选):配置请求。
返回值:
Schema
:目标边schema。
// 获取图集UltipaTeam中名为relatesTo的边schema并打印其属性信息
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.getEdgeSchema("relatesTo", requestConfig);
console.log("Property: ", resp.data?.properties);
Property: [
{
name: 'type',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
}
]
createSchema()
在当前图集新建一个schema。
参数:
Schema
:待创建的schema;必须设置name
字段和dbType
字段,desc
(描述的缩写)和properties
是可选的。boolean
:是否创建属性,默认为false
。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
// 在图集'UltipaTeam'中创建点schema'utility'(包含属性)并打印其所有信息。
const property1: ULTIPA.Header = {
name: "name",
type: ULTIPA.PropertyType.string,
};
const property2: ULTIPA.Header = {
name: "purchaseDate",
type: ULTIPA.PropertyType.datetime,
};
let nodePro = await conn.createSchema(
{
dbType: ULTIPA.DBType.DBNODE,
name: "utility",
properties: [property1, property2],
desc: "Office utilities",
},
true,
requestConfig
);
console.log("Node Schema Creation: ", nodePro.status.code_desc);
console.log((await conn.getNodeSchema("utility", requestConfig)).data);
// 在图集'UltipaTeam'中创建边Schema'managedBy'(无属性)并打印其所有信息。
let edgePro = await conn.createSchema(
{
dbType: ULTIPA.DBType.DBEDGE,
name: "managedBy",
},
false,
requestConfig
);
console.log("Edge Schema Creation: ", edgePro.status.code_desc);
console.log((await conn.getEdgeSchema("managedBy", requestConfig)).data);
Node Schema Creation: SUCCESS
{
name: 'utility',
description: 'Office utilities',
properties: [
{
name: 'name',
type: 'string',
description: '',
lte: 'false',
extra: '{}'
},
{
name: 'purchaseDate',
type: 'datetime',
description: '',
lte: 'false',
extra: '{}'
}
],
totalNodes: '0'
}
Edge Schema Creation: SUCCESS
{ name: 'managedBy', description: '', properties: [], totalEdges: '0' }
createSchemaIfNotExist()
在当前图集新建一个schema,若同名schema已存在,忽略报错。
参数:
Schema
:待创建的schema;必须设置name
字段和dbType
字段,description
字段和properties
字段可选。RequestConfig
(可选):配置请求。
返回值:
Boolean
: 创建是否发生。
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
// 在图集'UltipaTeam'中创建一个Schema,并打印是否忽略重复创建。
let creation1 = await conn.createSchemaIfNotExist(
{
dbType: ULTIPA.DBType.DBNODE,
name: "utility",
desc: "Office utilities",
},
requestConfig
);
console.log("Ignore repeated creation: ", creation1.data);
// 再次创建相同的模式,并打印是否忽略重复创建。
let creation2 = await conn.createSchemaIfNotExist(
{
dbType: ULTIPA.DBType.DBNODE,
name: "utility",
desc: "Office utilities",
},
requestConfig
);
console.log("Ignore repeated creation: ", creation2.data);
Ignore repeated creation: false
Ignore repeated creation: true
alterSchema()
根据schema名称修改当前图集中某个schema的名称和描述。
参数:
Schema
:图集中待修改的schema;必须设置name
字段和DbType
字段。Schema
:更新已有schema的配置;字段name
和desc
(描述的缩写)中的一个或两个必须设置。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
// 将图集UltipaTeam中的一个点schema由utility改为securityUtility并删除其描述
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.alterSchema(
{
dbType: ULTIPA.DBType.DBNODE,
name: "utility",
desc: "Office utilities",
},
{
dbType: ULTIPA.DBType.DBNODE,
name: "securityUtility",
desc: "",
},
requestConfig
);
console.log(resp.status.code_desc);
SUCCESS
dropSchema()
根据schema名称从当前图集删除某个schema。
参数:
Schema
:图集中待删除的schema;必须设置name
字段和DbType
字段。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
// 在图集UltipaTeam中删除名为utility的点schema
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.dropSchema(
{
dbType: ULTIPA.DBType.DBNODE,
name: "utility",
},
requestConfig
);
console.log(resp);
{
status: { code: 0, message: '', code_desc: 'SUCCESS' },
statistics: { totalCost: 1, engineCost: 0, nodeAffected: 0, edgeAffected: 0 },
req: undefined
}
Property
showProperty()
获取当前图集的自定义点属性信息或边属性信息。
参数:
DBType
属性类型(点属性或边属性)。string
:schema名称。RequestConfig
(可选):配置请求。
返回值:
Property[]
:当前图集全部目标属性列表。
// 检索图集 'UltipaTeam' 中的所有点属性,并打印它们的名称和关联的schema
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
const nameList = (await conn.showNodeSchema(requestConfig)).data?.map(
(item) => item.name
)!;
for (let i = 0; i < nameList.length; i++) {
let resp = await conn.showProperty(
ULTIPA.DBType.DBNODE,
nameList[i],
requestConfig
);
console.log(
"Schema",
nameList[i],
"contains properties",
resp.data?.map((item) => item.name)
);
}
Schema default contains properties []
Schema member contains properties [ 'name', 'title', 'profile' ]
Schema organization contains properties [ 'name', 'logo' ]
showNodeProperty()
获取当前图集的自定义点属性信息。
参数:
string
:schema名称。RequestConfig
(可选):配置请求。
返回值:
Property[]
:当前图集全部目标属性列表。
// 获取图集UltipaTeam中名为member的点schema其关联的所有自定义点属性信息并打印属性数量
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let NodePro = await conn.showNodeProperty("member", requestConfig);
console.log(NodePro.data?.length);
3
showEdgeProperty()
获取当前图集的自定义边属性信息。
参数:
string
:schema名称。RequestConfig
(可选):配置请求。
返回值:
Property[]
:当前图集全部目标属性列表。
// 获取图集UltipaTeam中名为relatesTo的边schema其关联的所有自定义边属性并打印属性名称
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let edgePro = await conn.showEdgeProperty("relatesTo", requestConfig);
console.log(edgePro.data?.map((item) => item.name));
[ 'type' ]
getProperty()
获取当前图集的一个自定义点属性或边属性。
参数:
ULTIPA.DBType
属性类型(点属性或边属性)。string
:schema名称。string
:属性名称RequestConfig
(可选):配置请求。
返回值:
Property
:目标属性。
// 获取图集UltipaTeam的点属性@member.title并打印其全部信息
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.getProperty(
ULTIPA.DBType.DBNODE,
"member",
"title",
requestConfig
);
console.log(resp.data);
{
name: 'title',
type: 'string',
lte: 'false',
read: '1',
write: '1',
schema: 'member',
description: '',
extra: '{}',
encrypt: ''
}
getNodeProperty()
获取当前图集的一个自定义点属性。
参数:
string
:schema名称。string
:属性名称RequestConfig
(可选):配置请求。
返回值:
Property
:目标属性。
// 获取图集UltipaTeam的点属性@member.title并打印其全部信息
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.getNodeProperty(
"member",
"title",
requestConfig
);
console.log(resp.data);
{
name: 'title',
type: 'string',
lte: 'false',
read: '1',
write: '1',
schema: 'member',
description: '',
extra: '{}',
encrypt: ''
}
getEdgeProperty()
Retrieves a custom property of edges from the current graphset.
参数:
string
:schema名称。string
:属性名称RequestConfig
(可选):配置请求。
返回值:
Property
:目标属性。
// 获取图集UltipaTeam的边属性@relatesTo.type并打印其全部信息
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp = await conn.getEdgeProperty("relatesTo", "type", requestConfig);
console.log(resp.data);
{
name: 'type',
type: 'string',
lte: 'false',
read: '1',
write: '1',
schema: 'relatesTo',
description: '',
extra: '{}',
encrypt: ''
}
createProperty()
在当前图集为点schema或边schema创建一个属性。
参数:
ULTIPA.DBType
属性类型(点属性或边属性)。string
:schema名称,可用*
指定全部schema。Property
:待创建的属性;必须设置name
字段和type
字段,description
字段可选。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
// 在图集UltipaTeam中为名为member的点schema创建两个属性并打印错误代码
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
let resp1 = await conn.createProperty(
ULTIPA.DBType.DBNODE,
"member",
{ name: "startDate", schema: "member", type: ULTIPA.PropertyType.datetime },
requestConfig
);
console.log(resp1.status.code_desc);
let resp2 = await conn.createProperty(
ULTIPA.DBType.DBNODE,
"member",
{ name: "age", schema: "member", type: ULTIPA.PropertyType.int32 },
requestConfig
);
console.log(resp2.status.code_desc);
SUCCESS
SUCCESS
createPropertyIfNotExist()
在当前图集为某个点schema或边schema新建一个属性,若同名属性已存在,忽略报错。
参数:
ULTIPA.DBType
属性类型(点属性或边属性)。string
:schema名称,可用*
指定全部schema。Property
:待创建的属性;必须设置name
字段和type
字段,description
字段可选。RequestConfig
(可选):配置请求。
返回值:
Boolean
:创建是否发生。
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
// 为图集UltipaTeam中名为'member'的点Schema新建一个属性,并打印是否忽略重复创建。
let resp1 = await conn.createPropertyIfNotExist(
ULTIPA.DBType.DBNODE,
"member",
{ name: "startDate", schema: "member", type: ULTIPA.PropertyType.datetime },
requestConfig
);
console.log("Ignore repeated creation: ", resp1.data);
// 在图集UltipaTeam中再次创建相同的属性,并打印是否忽略重复创建。
let resp2 = await conn.createPropertyIfNotExist(
ULTIPA.DBType.DBNODE,
"member",
{ name: "startDate", schema: "member", type: ULTIPA.PropertyType.datetime },
requestConfig
);
console.log("Ignore repeated creation: ", resp2.data);
Ignore repeated creation: false
Ignore repeated creation: true
alterProperty()
根据属性名称修改当前图集中某个自定义属性的名称和描述。
参数:
ULTIPA.DBType
属性类型(点属性或边属性)。Property
:图集中待修改的属性;必须设置name
字段和schema
字段(可用*
指定全部schema)。Property
:更新已有属性的配置;字段name
和description
中的一个或两个必须设置。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
// 将图集UltipaTeam中全部点schema下的name属性改为Name
let resp = await conn.alterProperty(
ULTIPA.DBType.DBNODE,
{ name: "name", schema: "*" },
{ name: "Name", schema: "*" },
requestConfig
);
console.log(resp.status.code_desc);
SUCCESS
dropProperty()
根据属性名称和关联schema从当前图集删除某自定义属性。
参数:
ULTIPA.DBType
属性类型(点属性或边属性)。string
:schema名称。string
:属性名称RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
// 删除图集UltipaTeam中与全部点schema关联的startDate属性并打印错误代码
let resp1 = await conn.dropProperty(
ULTIPA.DBType.DBNODE,
"*",
"startDate",
requestConfig
);
console.log(resp1.status.code_desc);
//删除图集UltipaTeam的点属性@member.name并打印错误代码
let resp2 = await conn.dropProperty(
ULTIPA.DBType.DBNODE,
"member",
"name",
requestConfig
);
console.log(resp1.status.code_desc);
SUCCESS
SUCCESS
完整示例
import { ConnectionPool, ULTIPA } from "@ultipa-graph/ultipa-node-sdk";
import { GraphExra } from "@ultipa-graph/ultipa-node-sdk/dist/connection/extra/graph.extra";
import { getEdgesPrintInfo } from "@ultipa-graph/ultipa-node-sdk/dist/printers/edge";
import { RequestType } from "@ultipa-graph/ultipa-node-sdk/dist/types";
import { ListFormat } from "typescript";
let sdkUsage = async () => {
// 设置连接
//URI示例: hosts="mqj4zouys.us-east-1.cloud.ultipa.com:60010"
let hosts = [
"192.168.1.85:60061",
"192.168.1.86:60061",
"192.168.1.87:60061",
];
let username = "***";
let password = "***";
let connPool = new ConnectionPool(hosts, username, password);
// 建立与数据库的连接
let conn = await connPool.getActive();
let isSuccess = await conn.test();
console.log(isSuccess);
// 配置请求
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "UltipaTeam",
useMaster: true,
};
// 在图集UltipaTeam中新建名为utility的点schema(同时创建属性)并打印错误代码
const property1: ULTIPA.Header = {
name: "name",
type: ULTIPA.PropertyType.string,
};
const property2: ULTIPA.Header = {
name: "purchaseDate",
type: ULTIPA.PropertyType.datetime,
};
let nodePro = await conn.createSchema(
{
dbType: ULTIPA.DBType.DBNODE,
name: "utility",
properties: [property1, property2],
desc: "Office utilities",
},
true,
requestConfig
);
console.log("Node Schema Creation: ", nodePro.status.code_desc);
console.log((await conn.getNodeSchema("utility", requestConfig)).data);
};
sdkUsage().then(console.log).catch(console.log);