Vue d’ensemble
La clause insert().overwrite().into()
facilite soit l'écrasement de nodes ou edges existants au sein d'un seul schema, soit l'insertion de nouveaux nodes ou edges.
Syntaxe
// Écraser ou insérer des nodes
insert().overwrite().into(@<schema>).nodes([
{<property1>: <value1>, <property2>: <value2>, ...},
{<property1>: <value1>, <property2>: <value2>, ...}
])
// Écraser ou insérer des edges
insert().overwrite().into(@<schema>).edges([
{<property1>: <value1>, <property2>: <value2>, ...},
{<property1>: <value1>, <property2>: <value2>, ...}
])
- Spécifier un seul schema dans la méthode
into()
. - Inclure un ou plusieurs nodes ou edges dans la méthode
nodes()
ouedges()
.- Fournir des paires clé-valeur de properties pour chaque node ou edge encloses dans
{ }
. - S'il n'y a qu'un seul node ou edge, les
[ ]
extérieurs peuvent être omis.
- Fournir des paires clé-valeur de properties pour chaque node ou edge encloses dans
- Permet de définir un alias pour la clause, avec le type de données étant soit NODE soit EDGE.
Lorsqu'un node ou edge est écrasé :
- Un node ciblé est spécifié par son
_id
et/ou_uuid
. Un edge ciblé est spécifié par son_uuid
,_from
et_to
(ou_from_uuid
et_to_uuid
) - Les valeurs des properties personnalisées fournies seront écrasées ; les valeurs des properties personnalisées manquantes seront
null
. - Les valeurs des properties système (
_id
,_uuid
,_from
,_to
,_from_uuid
,_to_uuid
) restent inchangées.
Un nouveau node est inséré lorsqu'un nouvel _id
ou _uuid
est fourni, ou lorsque _id
et _uuid
sont tous deux manquants.
Un nouvel edge est inséré lorsqu'un nouvel _uuid
est fourni, ou lorsque _uuid
est manquant.
Exemple de Graph
Exécutez ces UQLs ligne par ligne dans un graphset vide pour créer ce graph :
create().node_schema("user").edge_schema("follow")
create().node_property(@user, "name").node_property(@user, "age", int32).edge_property(@follow, "time", datetime)
insert().into(@user).nodes([{_id:"U001", _uuid:1, name:"Jason", age:30}, {_id:"U002", _uuid:2, name:"Tim"}, {_id:"U003", _uuid:3, name:"Grace", age:25}, {_id:"U004", _uuid:4, name:"Ted", age:26}])
insert().into(@follow).edges([{_uuid:1, _from_uuid:4, _to_uuid:1, time:"2021-9-10"}, {_uuid:2, _from_uuid:3, _to_uuid:2, time:"2020-3-12"}, {_uuid:3, _from_uuid:4, _to_uuid:2, time:"2023-7-30"}])
Exemples
Écraser ou Insérer des Nodes
insert().overwrite().into(@user).nodes([
{_id: "U001", name: "John"},
{_id: "U005", name: "Alice"},
{age: 12}
]) as n
return n{*}
- Le premier node avec l'
_id
fourni U001 existe dans le graph, donc il est écrasé. - Le deuxième est un nouveau node à insérer, car l'
_id
fourni U005 n'existe pas dans le graph. - Le troisième est un nouveau node à insérer, car les deux
_id
et_uuid
sont manquants.
Résultat :
_id |
_uuid | name | age |
---|---|---|---|
U001 | 1 | John | null |
U005 | 5 | Alice | null |
ULTIPA8000000000000006 | 6 | null |
12 |
Écraser ou Insérer des Edges
insert().overwrite().into(@follow).edges([
{_uuid: 1, _from: "U004", _to: "U001"},
{_uuid: 4, _from: "U002", _to: "U003"},
{_from: "U002", _to: "U001", time: "2023-9-6"}
]) as e
return e{*}
- Le premier edge avec l'
_uuid
fourni 1,_from
U004, et_to
U001 existe dans le graph, donc il est écrasé. - Le second est un nouvel edge à insérer, car l'
_uuid
fourni 4 n'existe pas dans le graph. - Le troisième est un nouvel edge à insérer, car
_uuid
est manquant.
Résultat :
_uuid | _from | _to | _from_uuid |
_to_uuid | time |
---|---|---|---|---|---|
1 | U004 | U001 | 4 | 1 | null |
4 | U002 | U003 | 2 | 3 | null |
5 | U002 | U001 | 2 | 1 | 2023-09-06 00:00:00 |
Raisons Courantes d'Échecs
- L'écrasement échoue lorsque les nodes ou edges existants spécifiés n'appartiennent pas au schema donné.
- L'écrasement ou l'insertion d'un node échoue lorsque
_id
et_uuid
sont fournis, l'une de leurs valeurs existe dans le graph tandis que l'autre n'existe pas. - L'écrasement ou l'insertion d'un node échoue lorsque
_id
et_uuid
sont fournis, ils existent tous deux dans le graph mais ne correspondent pas. - L'écrasement ou l'insertion d'un edge échoue lorsque le node de début ou de fin n'est pas spécifié.
- L'écrasement ou l'insertion d'un edge échoue lorsque le node de début ou de fin spécifié n'existe pas dans le graph.
- L'écrasement d'un edge échoue lorsque l'
_uuid
existant donné ne correspond pas aux nodes de début et fin donnés.