Cette section introduit des méthodes sur un objet Connection
pour insérer des nodes et des edges au graph ou supprimer des nodes et des edges du graphset.
Chaque exemple se concentre uniquement sur l'utilisation de la méthode. Pour un exemple de code complet, veuillez vous référer à l'Exemple Complet.
Exemple de Modèle de Données de Graph
Les exemples ci-dessous démontrent comment insérer ou supprimer des nodes ou des edges d'un graphset avec le schema et les propriétés suivantes :
Correspondance des Types de Propriétés
Lors de l'insertion de nodes ou d'edges, il peut être nécessaire de spécifier des valeurs de propriétés de différents types. La correspondance entre les types de propriétés Ultipa et les types de données Node.js/Driver est la suivante :
Type de Propriété Ultipa | Type Node.js/Driver |
---|---|
int32 | number |
uint32 | number |
int64 | string |
uint64 | string |
float | string |
double | string |
decimal | string |
string | string |
text | string |
datetime | string |
timestamp | number |
point | string |
blob | Buffer |
list | Array |
set | Array |
Insertion
insertNodes()
Insère de nouveaux nodes d'un schema dans le graph actuel.
Paramètres :
string
: Nom du schema.Node[]
: La liste des objetsNode
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête. L'objetResponse
contient un aliasnodes
qui détient tous les nodes insérés lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Insère deux nodes dans le schema 'user' dans le graphset 'lcc', imprime le code erreur et les informations des nodes insérés
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
let resp = await conn.insertNodes(
"user",
[
{
_id: "U001",
_uuid: 1,
name: "Alice",
age: 18,
score: "65.32",
birthday: "1993-5-4",
location: `POINT(23.63 104)`,
profile: "abc",
interests: ["tennis", "violin"],
permissionCodes: [2004, 3025, 1025],
},
{ _id: "U002", _uuid: 2, name: "Bob" },
],
insertRequestConfig
);
console.log(resp.status.code_desc);
console.log(resp.data);
SUCCESS
[
Node { id: 'U001', uuid: '1', schema: 'user', values: {} },
Node { id: 'U002', uuid: '2', schema: 'user', values: {} }
]
insertEdges()
Insère de nouveaux edges d'un schema dans le graph actuel.
Paramètres :
string
: Nom du schema.Edge[]
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête. L'objetResponse
contient un aliasedges
qui détient tous les edges insérés lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Insère deux edges dans le schema 'follows' dans le graphset 'lcc', imprime le code erreur et les informations des edges insérés
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: true,
graphSetName: "lcc",
useMaster: true,
};
let resp = await conn.insertEdges(
"follows",
[
{
_uuid: 1,
_from: "U001",
_to: "U002",
createdOn: "2024-5-6",
},
{
_uuid: 2,
_from: "U002",
_to: "U001",
createdOn: "2024-5-8",
},
],
insertRequestConfig
);
console.log(resp.status.code_desc);
console.log(resp.data);
SUCCESS
[
Edge {
from: 'U001',
to: 'U002',
uuid: '1',
from_uuid: '1',
to_uuid: '2',
schema: 'follows',
values: {}
},
Edge {
from: 'U002',
to: 'U001',
uuid: '2',
from_uuid: '2',
to_uuid: '1',
schema: 'follows',
values: {}
}
]
insertNodesBatchBySchema()
Insère de nouveaux nodes d'un schema dans le graph actuel via gRPC. Les propriétés dans les valeurs du node doivent être cohérentes avec celles déclarées dans la structure de schema.
Paramètres :
Schema
: Le schema cible.Node[]
: La liste des objetsNode
à insérer.InsertRequestConfig
: Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête.Response.InsertNodesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Insère deux nodes dans le schema 'user' dans le graphset 'lcc' et imprime le code erreur
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
let proInfo: ULTIPA.Property[] = [];
let pro1: ULTIPA.Property = {
name: "name",
type: ULTIPA.PropertyType.string,
};
let pro2: ULTIPA.Property = {
name: "age",
type: ULTIPA.PropertyType.int32,
};
let pro3: ULTIPA.Property = {
name: "score",
type: ULTIPA.PropertyType.decimal,
};
let pro4: ULTIPA.Property = {
name: "birthday",
type: ULTIPA.PropertyType.datetime,
};
let pro5: ULTIPA.Property = {
name: "location",
type: ULTIPA.PropertyType.point,
};
let pro6: ULTIPA.Property = {
name: "profile",
type: ULTIPA.PropertyType.blob,
};
let pro7: ULTIPA.Property = {
name: "interests",
type: ULTIPA.PropertyType.list,
};
let pro8: ULTIPA.Property = {
name: "permissionCodes",
type: ULTIPA.PropertyType.set,
};
const pros = [pro1, pro2, pro3, pro4, pro5, pro6, pro7, pro8];
for (const item of pros) {
proInfo.push(item);
}
let nodeInfo1 = new ULTIPA.Node();
nodeInfo1.id = "U001";
nodeInfo1.uuid = "1";
nodeInfo1.set("name", "Alice");
nodeInfo1.set("age", 18);
nodeInfo1.set("score", "65.32");
nodeInfo1.set("birthday", "1993-5-4");
nodeInfo1.set("location", `POINT(23.63 104)`);
nodeInfo1.set("profile", "abc");
nodeInfo1.set("interests", ["tennis", "violin"]);
nodeInfo1.set("permissionCodes", [2004, 3025, 1025]);
let node1: ULTIPA.Node[] = [];
node1.push(nodeInfo1);
let insert1 = await conn.insertNodesBatchBySchema(
{ dbType: ULTIPA.DBType.DBNODE, name: "user", properties: proInfo },
node1,
insertRequestConfig
);
console.log(insert1.status.code_desc);
let nodeInfo2 = new ULTIPA.Node();
nodeInfo2.id = "U002";
nodeInfo2.uuid = "2";
nodeInfo2.set("name", "Bob");
nodeInfo2.set("age", null);
nodeInfo2.set("score", null);
nodeInfo2.set("birthday", null);
nodeInfo2.set("location", null);
nodeInfo2.set("profile", null);
nodeInfo2.set("interests", null);
nodeInfo2.set("permissionCodes", null);
let node2: ULTIPA.Node[] = [];
node2.push(nodeInfo2);
let insert2 = await conn.insertNodesBatchBySchema(
{ dbType: ULTIPA.DBType.DBNODE, name: "user", properties: proInfo },
node2,
insertRequestConfig
);
console.log(insert2.status.code_desc);
SUCCESS
SUCCESS
insertEdgesBatchBySchema()
Insère de nouveaux edges d'un schema dans le graph actuel via gRPC. Les propriétés dans les valeurs de edge doivent être cohérentes avec celles déclarées dans la structure de schema.
Paramètres :
Schema
: Le schema cible.Edge[]
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête.Response.InsertNodesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Insère deux edges dans le schema 'follows' dans le graphset 'lcc' et imprime le code erreur
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
let proInfo: ULTIPA.Property[] = [];
let pro: ULTIPA.Property = {
name: "createdOn",
type: ULTIPA.PropertyType.PROPERTY_TIMESTAMP,
};
proInfo.push(pro);
let edgeInfo1 = new ULTIPA.Edge();
edgeInfo1.uuid = "1";
edgeInfo1.from = "U001";
edgeInfo1.to = "U002";
edgeInfo1.set("createdOn", 1714953600);
let edge1: ULTIPA.Edge[] = [];
edge1.push(edgeInfo1);
let insert1 = await conn.insertEdgesBatchBySchema(
{ dbType: ULTIPA.DBType.DBEDGE, name: "follows", properties: proInfo },
edge1,
insertRequestConfig
);
console.log(insert1.status.code_desc);
let edgeInfo2 = new ULTIPA.Edge();
edgeInfo2.uuid = "2";
edgeInfo2.from = "U002";
edgeInfo2.to = "U001";
edgeInfo2.set("createdOn", 1715126400);
let edge2: ULTIPA.Edge[] = [];
edge2.push(edgeInfo2);
let insert2 = await conn.insertEdgesBatchBySchema(
{ dbType: ULTIPA.DBType.DBEDGE, name: "follows", properties: proInfo },
edge2,
insertRequestConfig
);
console.log(insert2.status.code_desc);
SUCCESS
SUCCESS
insertNodesBatchAuto()
Insère de nouveaux nodes d'un ou plusieurs schemas dans le graph actuel via gRPC. Les propriétés dans les valeurs du node doivent être cohérentes avec celles définies dans la structure du schema correspondant.
Paramètres :
Node[]
: La liste des objetsNode
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête.Response.InsertNodesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Insère deux nodes dans le schema 'user' et un node dans le schema `product` dans le graphset 'lcc' et imprime le code erreur
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
let nodeInfo1 = new ULTIPA.Node();
nodeInfo1.schema = "user";
nodeInfo1.id = "U001";
nodeInfo1.uuid = "1";
nodeInfo1.set("name", "Alice");
nodeInfo1.set("age", 18);
nodeInfo1.set("score", "65.32");
nodeInfo1.set("birthday", "1993-5-4");
nodeInfo1.set("location", `POINT(23.63 104)`);
nodeInfo1.set("profile", "abc");
nodeInfo1.set("interests", ["tennis", "violin"]);
nodeInfo1.set("permissionCodes", [2004, 3025, 1025]);
let node1: ULTIPA.Node[] = [];
node1.push(nodeInfo1);
let insert1 = await conn.insertNodesBatchAuto(node1, insertRequestConfig);
console.log(insert1.status.code_desc);
let nodeInfo2 = new ULTIPA.Node();
nodeInfo2.schema = "user";
nodeInfo2.id = "U002";
nodeInfo2.uuid = "2";
nodeInfo2.set("name", "Bob");
nodeInfo2.set("age", null);
nodeInfo2.set("score", null);
nodeInfo2.set("birthday", null);
nodeInfo2.set("location", null);
nodeInfo2.set("profile", null);
nodeInfo2.set("interests", null);
nodeInfo2.set("permissionCodes", null);
let node2: ULTIPA.Node[] = [];
node2.push(nodeInfo2);
let insert2 = await conn.insertNodesBatchAuto(node2, insertRequestConfig);
console.log(insert2.status.code_desc);
let nodeInfo3 = new ULTIPA.Node();
nodeInfo3.schema = "product";
nodeInfo3.id = "P001";
nodeInfo3.uuid = "3";
nodeInfo3.set("name", "Wireless Earbud");
nodeInfo3.set("price", 93.2);
let node3: ULTIPA.Node[] = [];
node3.push(nodeInfo3);
let insert3 = await conn.insertNodesBatchAuto(node3, insertRequestConfig);
console.log(insert3.status.code_desc);
SUCCESS
SUCCESS
SUCCESS
insertEdgesBatchAuto()
Insère de nouveaux edges d'un ou plusieurs schemas dans le graph actuel via gRPC. Les propriétés dans les valeurs d'edge doivent être cohérentes avec celles définies dans la structure du schema correspondant.
Paramètres :
Edge[]
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête.Response.InsertEdgesReply
contient le rapport d'insertion lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Insère deux edges dans le schema 'follows' et un edge dans le schema 'purchased' dans le graphset 'lcc' et imprime le code erreur
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
let edgeInfo1 = new ULTIPA.Edge();
edgeInfo1.schema = "follows";
edgeInfo1.uuid = "1";
edgeInfo1.from = "U001";
edgeInfo1.to = "U002";
edgeInfo1.set("createdOn", 1714953600);
let edge1: ULTIPA.Edge[] = [];
edge1.push(edgeInfo1);
let insert1 = await conn.insertEdgesBatchAuto(edge1, insertRequestConfig);
console.log(insert1.status.code_desc);
let edgeInfo2 = new ULTIPA.Edge();
edgeInfo2.schema = "follows";
edgeInfo2.uuid = "2";
edgeInfo2.from = "U002";
edgeInfo2.to = "U001";
edgeInfo2.set("createdOn", 1715126400);
let edge2: ULTIPA.Edge[] = [];
edge2.push(edgeInfo2);
let insert2 = await conn.insertEdgesBatchAuto(edge2, insertRequestConfig);
console.log(insert2.status.code_desc);
let edgeInfo3 = new ULTIPA.Edge();
edgeInfo3.schema = "purchased";
edgeInfo3.uuid = "3";
edgeInfo3.from = "U002";
edgeInfo3.to = "P001";
edgeInfo3.set("qty", 1);
let edge3: ULTIPA.Edge[] = [];
edge3.push(edgeInfo3);
let insert3 = await conn.insertEdgesBatchAuto(edge3, insertRequestConfig);
console.log(insert3.status.code_desc);
SUCCESS
SUCCESS
SUCCESS
Suppression
deleteNodes()
Supprime des nodes qui répondent aux conditions données du graph actuel. Il est important de noter que la suppression d'un node entraîne la suppression de tous les edges qui y sont connectés.
Paramètres :
string
: La condition de filtrage pour spécifier les nodes à supprimer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête. L'objetResponse
contient un aliasnodes
qui détient tous les nodes supprimés lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Supprime un node @user dont le nom est 'Alice' du graphset 'lcc' et imprime le code erreur
// Tous les edges attachés au node supprimé sont également supprimés
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
let resp = await conn.deleteNodes(
"{@user.name == 'Alice'}",
insertRequestConfig
);
console.log(resp.status.code_desc);
SUCCESS
deleteEdges()
Supprime des edges qui répondent aux conditions données du graph actuel.
Paramètres :
string
: La condition de filtrage pour spécifier les edges à supprimer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
Response
: Résultat de la requête. L'objetResponse
contient un aliasedges
qui détient tous les edges supprimés lorsqueInsertRequestConfig.slient
est réglé sur faux.
// Supprime tous les edges @purchased du graphset 'lcc' et imprime le code erreur
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
let resp = await conn.deleteEdges("{@purchased}", insertRequestConfig);
console.log(resp.status.code_desc);
SUCCESS
Exemple Complet
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 () => {
// Connection configurations
//URI example: 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);
// Établit la connexion à la base de données
let conn = await connPool.getActive();
let isSuccess = await conn.test();
console.log(isSuccess);
// Configurations de la requête d'insertion
let insertRequestConfig = <RequestType.InsertRequestConfig>{
insertType: ULTIPA.InsertType.INSERT_TYPE_NORMAL,
silent: false,
graphSetName: "lcc",
useMaster: true,
};
// Insère deux nodes dans le schema 'user' et un node dans le schema `product` dans le graphset 'lcc' et imprime le code erreur
let nodeInfo1 = new ULTIPA.Node();
nodeInfo1.schema = "user";
nodeInfo1.id = "U001";
nodeInfo1.uuid = "1";
nodeInfo1.set("name", "Alice");
nodeInfo1.set("age", 18);
nodeInfo1.set("score", "65.32");
nodeInfo1.set("birthday", "1993-5-4");
nodeInfo1.set("location", `POINT(23.63 104)`);
nodeInfo1.set("profile", "abc");
nodeInfo1.set("interests", ["tennis", "violin"]);
nodeInfo1.set("permissionCodes", [2004, 3025, 1025]);
let node1: ULTIPA.Node[] = [];
node1.push(nodeInfo1);
let insert1 = await conn.insertNodesBatchAuto(node1, insertRequestConfig);
console.log(insert1.status.code_desc);
let nodeInfo2 = new ULTIPA.Node();
nodeInfo2.schema = "user";
nodeInfo2.id = "U002";
nodeInfo2.uuid = "2";
nodeInfo2.set("name", "Bob");
nodeInfo2.set("age", null);
nodeInfo2.set("score", null);
nodeInfo2.set("birthday", null);
nodeInfo2.set("location", null);
nodeInfo2.set("profile", null);
nodeInfo2.set("interests", null);
nodeInfo2.set("permissionCodes", null);
let node2: ULTIPA.Node[] = [];
node2.push(nodeInfo2);
let insert2 = await conn.insertNodesBatchAuto(node2, insertRequestConfig);
console.log(insert2.status.code_desc);
let nodeInfo3 = new ULTIPA.Node();
nodeInfo3.schema = "product";
nodeInfo3.id = "P001";
nodeInfo3.uuid = "3";
nodeInfo3.set("name", "Wireless Earbud");
nodeInfo3.set("price", 93.2);
let node3: ULTIPA.Node[] = [];
node3.push(nodeInfo3);
let insert3 = await conn.insertNodesBatchAuto(node3, insertRequestConfig);
console.log(insert3.status.code_desc);
};
sdkUsage().then(console.log).catch(console.log);