Cette section guide les utilisateurs pour commencer avec GQL dans Ultipa Graph Database.
Exemple de Graph
Les exemples suivants s'exécutent sur ce graph :
Notes
- Ce graph inclut les étiquettes suivantes :
- Étiquettes de node :
Person
,Club
etCompany
- Étiquettes d'edge :
Join
etWorkIn
- Étiquettes de node :
- En plus de l'étiquette, chaque node et edge est associé à certaines propriétés, telles que les propriétés
_id
,name
etgender
pour les nodes étiquetésPerson
. - Si une propriété n'a pas de valeur assignée, sa valeur est
null
, comme la propriétéendOn
de l'edge entre les nodesP1
etCO1
. - En plus des propriétés mentionnées, chaque node et edge a également une propriété
_uuid
, qui sert d'identifiant unique généré par le système lors de l'insertion des données.
Retourner Hello World
L'instruction RETURN
est utilisée pour afficher le résultat au client GQL.
RETURN "Hello World"
Lecture depuis la Base de Données
Les données que vous pouvez lire à partir d'un graph incluent les nodes, les edges, et les paths. Pour les récupérer, écrivez le motif correspondant dans l'instruction MATCH
.
Nodes
GQL utilise une paire de parenthèses ()
pour représenter des nodes :
// N'importe quel node anonyme
()
// N'importe quel node anonyme étiqueté "Person"
(:Person)
// N'importe quel node étiqueté "Person", lié à la variable n
(n:Person)
// N'importe quel node anonyme dont le nom est "Kavi Moore"
({name: "Kavi Moore"})
// N'importe quel node étiqueté "Club" dont le score dépasse 7, lié à la variable n
(n:Club WHERE n.score > 7)
Cette requête récupère les nodes étiquetés Person
dont le gender
est "male" :
MATCH (p:Person {gender: "male"})
RETURN p
Résultat : p
_id | _uuid | schema | valeurs |
---|---|---|---|
P1 | Sys-gen | Person | {name: "Kavi Moore", gender: "male"} |
P2 | Sys-gen | Person | {name: "Sira Lox", gender: "male"} |
Edges
GQL utilise une paire de crochets []
avec l'indication de la direction de l'edge pour représenter des edges :
// N'importe quel edge anonyme dans n'importe quelle direction
-[]-
// N'importe quel edge étiqueté "Join" pointant à droite, lié à la variable e
-[e:Join]->
// N'importe quel edge étiqueté "Join" pointant à gauche, dont le memberNo est 1, lié à la variable e
<-[e:Join {memberNo: 1}]-
// N'importe quel edge dans n'importe quelle direction, dont le startOn est antérieur à 2022-1-1, lié à la variable e
-[e WHERE startOn < "2022-1-1"]-
Cette requête récupère les edges étiquetés WorkIn
dont le endOn
est null
:
MATCH -[e:WorkIn WHERE e.endOn IS NULL]->
RETURN e
Résultat : e
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
valeurs |
---|---|---|---|---|---|---|
Sys-gen | P1 | CO1 | UUID de P1 | UUID de CO1 | WorkIn | {StartOn: "2023-05-03 00:00:00", endOn: null} |
Paths
Un path commence généralement et se termine par un node, et alterne entre nodes et edges. Par conséquent, vous pouvez concaténer les motifs de node et d'edge de manière récursive pour construire un motif de path.
// N'importe quel path anonyme en 1 étape où deux nodes anonymes sont connectés par un edge anonyme
()-[]-()
// N'importe quel path en 1 étape où un node étiqueté "Club" est connecté à un node anonyme par un edge étiqueté "Join" pointant à gauche; le path est lié à la variable p, le premier node est lié à la variable c
p = (c:Club)<-[:Join]-()
// N'importe quel path en 2 étapes où deux nodes étiquetés "Person" sont connectés à un node avec _id "C1", tous deux à travers un edge étiqueté "Join" pointant vers "C1"; le path est lié à la variable p
p = (:Person)-[:Join]->({_id: "C1"})<-[:Join]-(:Person)
Cette requête récupère les paths, chacun indiquant qu'une personne travaille actuellement dans l'entreprise InnoVex
, et retourne les paths et les noms de la personne :
MATCH p = (n:Person)-[e:WorkIn WHERE e.endOn IS NULL]->(:Company {name: "InnoVex"})
RETURN p, n.name
Résultat :
p | n.name |
---|---|
(:Person { | |
_id: "P1", name: "Kavi Moore", gender: "male"})-[:WorksIn {startOn: "2023-05-03 00:00:00", endOn: null}]->(:Company { | |
_id: "C01", name: "InnoVex"}) | Kavi Moore |
Écriture dans la Base de Données
Vous pouvez écrire dans la base de données en insérant, mettant à jour et supprimant des nodes et des edges dans la base de données.
Insertion
L'instruction INSERT
sert à créer de nouveaux nodes et edges dans la base de données.
Cette requête insère un node étiqueté Person
, son _id
est défini à "P4", et name
est défini à "Tiva Jorn" :
INSERT (:Person {_id: "P4", name: "Tiva Jorn"})
Cette requête insère un edge étiqueté WorkIn
pointant depuis le node avec _id
"P4" vers le node avec _id
"CO1", son startOn
est défini à "2025-3-1" :
MATCH (innovex {_id: "CO1"}), (tiva {_id: "P4"})
INSERT (tiva)-[:WorkIn {startOn: "2025-3-1"}]->(innovex)
Mise à jour
L'instruction SET
sert à mettre à jour les propriétés des nodes et edges existants dans la base de données. Les nodes ou edges à mettre à jour doivent d'abord être récupérés à partir de la base de données en utilisant l'instruction MATCH
.
Cette requête met à jour le node avec _id
"P4" en définissant son gender
à "female" :
MATCH (tiva {_id: "P4"})
SET tiva.gender = "female"
Cette requête met à jour l'edge étiqueté WorkIn
pointant depuis le node avec _id
"P4" vers le node avec _id
"CO1" en définissant son startOn
à "2025-4-1" :
MATCH ({_id: "P4"})-[e:WorkIn]->({_id: "CO1"})
SET e.startOn = "2025-4-1"
Suppression
L'instruction DELETE
sert à supprimer les nodes et edges dans la base de données. Les nodes ou edges à supprimer doivent d'abord être récupérés à partir de la base de données en utilisant l'instruction MATCH
. Par défaut, vous ne pouvez pas supprimer un node qui a encore des edges attachés.
Cette requête supprime l'edge étiqueté WorkIn
pointant depuis le node avec _id
"P4" vers le node avec _id
"CO1" :
MATCH ({_id: "P4"})-[e:WorkIn]->({_id: "CO1"})
DELETE e
Cette requête supprime le node avec _id
"P4" :
MATCH (n {_id: "P4"})
DELETE n