本节为您介绍如何使用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);
// 再次创建相同的schema,并打印是否忽略重复创建。
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()
获取当前图集的一个自定义边属性。
参数:
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);