Vue d'ensemble
La clause upsert().into()
facilite soit la mise à jour des nodes ou edges existants au sein d'un unique schema, soit l'insertion de nouveaux nodes ou edges.
Syntaxe
// Mettre à jour ou insérer des nodes
upsert().into(@<schema>).nodes([
{<property1>: <value1>, <property2>: <value2>, ...},
{<property1>: <value1>, <property2>: <value2>, ...}
])
// Mettre à jour ou insérer des edges
upsert().into(@<schema>).edges([
{<property1>: <value1>, <property2>: <value2>, ...},
{<property1>: <value1>, <property2>: <value2>, ...}
])
- Spécifiez un schema dans la méthode
into()
. - Incluez un ou plusieurs nodes ou edges dans la méthode
nodes()
ouedges()
.- Fournissez des paires clé-valeur de properties pour chaque node ou edge entre
{ }
. - S'il n'y a qu'un seul node ou edge, les
[ ]
externes peuvent être omis.
- Fournissez des paires clé-valeur de properties pour chaque node ou edge entre
- Permet la définition d'un alias pour la clause, avec le type de données étant soit NODE soit EDGE.
Lorsque un node ou un edge est mis à jour :
- Le node ciblé est spécifié par son
_id
et/ou_uuid
; l'edge ciblé est spécifié par son_uuid
,_from
et_to
(ou_from_uuid
et_to_uuid
) - Les valeurs des propriétés personnalisées fournies seront mises à jour; les valeurs des propriétés personnalisées manquantes resteront inchangées.
- Les valeurs des propriétés 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 à la fois _id
et _uuid
manquent.
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
Mettre à jour ou insérer des Nodes
upsert().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 mis à jour.
- Le second est un nouveau node à insérer, comme l'_id fourni U005 n'existe pas dans le graph.
- Le troisième est un nouveau node à insérer, comme à la fois
_id
et_uuid
manquent.
Résultat:
_id |
_uuid | name | age |
---|---|---|---|
U001 | 1 | John | 30 |
U005 | 5 | Alice | null |
ULTIPA8000000000000006 | 6 | null |
12 |
Mettre à jour ou insérer des Edges
upsert().into(@follow).edges([
{_uuid: 1, _from: "U004", _to: "U001", time: "2022-9-12"},
{_uuid: 4, _from: "U002", _to: "U003"},
{_from: "U002", _to: "U001", time: "2023-9-6"}
]) as e
return e{*}
- Le premier edge avec le
_uuid
fourni 1,_from
U004, et_to
U001 existe dans le graph, donc il est mis à jour. - Le second est un nouvel edge à insérer, comme le
_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 | 2022-09-12 00:00:00 |
4 | U002 | U003 | 2 | 3 | null |
5 | U002 | U001 | 2 | 1 | 2023-09-06 00:00:00 |
Raisons Courantes d'Échec
- La mise à jour ou l'insertion du node échoue lorsque à la fois
_id
et_uuid
sont fournis, qu'une de leurs valeurs existe dans le graph tandis que l'autre n'existe pas. - La mise à jour ou l'insertion du node échoue lorsque
_id
et_uuid
sont fournis, qu'ils existent tous les deux dans le graph mais qu'ils ne correspondent pas. - La mise à jour ou l'insertion de l'edge échoue lorsque le node de départ ou d'arrivée n'est pas spécifié.
- La mise à jour ou l'insertion de l'edge échoue lorsque le node de départ ou d'arrivée spécifié n'existe pas dans le graph.
- La mise à jour de l'edge échoue lorsque le
_uuid
existant donné ne correspond pas avec le node de départ et d'arrivée donnés.