Vue d’ensemble
L'instruction INSERT
permet d'insérer de nouveaux nodes et edges dans le graph en utilisant des motifs de path. Elle prend en charge l'insertion à la fois d'éléments individuels du graph et de paths, les paths étant essentiellement des séquences de nodes connectés par des edges.
Les labels et properties ne peuvent pas être créés lors de l'insertion de données. Assurez-vous que les labels et properties spécifiés existent déjà dans le graph avant d'insérer des données. Pour gérer les labels (schemas en UQL) et les properties, consultez Schema et Property en UQL.
<insert statement> ::=
"INSERT" <insert path pattern> [ { "," <insert path pattern> }... ]
<insert path pattern> ::=
<insert node pattern> [ { <insert edge pattern> <insert node pattern> }... ]
<insert node pattern> ::= "(" [ <insert element pattern filler> ] ")"
<insert edge pattern> ::=
"<-" [ <insert element pattern filler> ] "]-"
| "-" [ <insert element pattern filler> ] "->"
<insert element pattern filler> ::=
<element variable declaration> [ <label and property specification> ]
| [ <element variable declaration> ] <label and property specification>
<label and property specification> ::=
<label expression> [ "{" <property key value pair list> "}" ]
Détails
- Chaque node ou edge doit avoir un label spécifié.
- Une valeur unique doit être fournie pour la propriété système
_id
pour chaque node. - La propriété système
_uuid
ne peut pas être spécifiée manuellement; elle est générée automatiquement par le système. - Les nodes source et destination d'un edge doivent être définis en plaçant les motifs de node respectifs de chaque côté du motif d'edge, avec la direction clairement indiquée.
Exemple de Structure de Graph
Les exemples suivants s'appuient sur cette structure de graph :
Pour créer la structure de graph, exécutez les requêtes UQL suivantes une par une contre un graph vide :
// Create schemas (labels)
create().node_schema("User").node_schema("Club").edge_schema("Follows").edge_schema("Joins")
// Create properties
create().node_property(@User, "name").node_property(@User, "gender").edge_property(@Follows, "createdOn", datetime).edge_property(@Joins, "memberNo", uint32)
Insertion de Nodes Individuels
Les nodes individuels peuvent être insérés avec des motifs de node. Chaque node doit se voir attribuer un label et une valeur unique pour la propriété système _id
de type chaîne, et peut facultativement inclure des valeurs pour des properties personnalisées.
Cette requête insère deux nodes : un étiqueté User
avec les properties _id
et name
spécifiées, et un autre étiqueté Club
avec la propriété _id
spécifiée.
INSERT (:User {_id: "U01", name: 'Quasar92'}), (:Club {_id: "C01"})
Cette requête insère et renvoie un node lié à la variable mochaeach
.
INSERT (mochaeach:User {_id: "U02", name: 'mochaeach', gender: 'female'})
RETURN mochaeach
Résultat : mochaeach
_id | _uuid | schema | valeurs |
---|---|---|---|
U02 | Sys-gen | User | {name: "mochaeach", gender: "female"} |
Insertion d'Edges
Les edges ne peuvent être insérés qu'avec des motifs de path où chaque motif d'edge complet a des motifs de node de chaque côté et doit inclure une direction pour indiquer ses nodes source et destination. Chaque edge doit se voir attribuer un label et peut facultativement inclure des valeurs pour des properties personnalisées.
Vous pouvez soit insérer les nodes source et destination avec les edges, soit connecter les edges à des nodes existants.
Insertion d’Extrémités avec les Edges
Cette requête insère trois nodes étiquetés User
et deux edges étiquetés Follows
.
INSERT (:User {_id: 'U03', name: 'rowlock'})-[:Follows {createdOn: '2024-1-5'}]->(:User {_id: 'U04', name: 'Brainy', gender: 'male'})<-[:Follows {createdOn: '2024-2-1'}]-(:User {_id: 'U05', name: 'purplechalk', gender: 'female'})
Connexion à des Nodes Existants
Cette requête insère et renvoie un edge étiqueté Joins
. Les nodes source et destination sont trouvés par l'instruction MATCH
précédente et liés aux variables n1
et n2
respectivement.
MATCH (n1:User {_id: 'U04'}), (n2:Club {_id: 'C01'})
INSERT (n1)-[e:Joins {memberNo: 1}]->(n2)
RETURN e
Résultat : e
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
valeurs |
---|---|---|---|---|---|---|
Sys-gen | U04 | C01 | UUID de U04 | UUID de C01 | Joins | {memberNo: 1} |
Insertion de Paths Connectés
Cette requête insère deux paths qui se croisent à un node. Pour réutiliser ce node, la variable c02
est employée.
INSERT (:User {_id: 'U06', name: 'waveBliss'})-[:Joins {memberNo: 1}]->(c02:Club {_id: 'C02'})<-[:Joins {memberNo: 2}]-(:User {_id: 'U07', name: 'bella', gender: 'female'}),
(:User {_id: 'U08', name: 'Roose'})-[:Joins {memberNo: 3}]->(c02)