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
_idet/ou_uuid; l'edge ciblé est spécifié par son_uuid,_fromet_to(ou_from_uuidet_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
_idet_uuidmanquent.
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
_uuidfourni 1,_fromU004, et_toU001 existe dans le graph, donc il est mis à jour. - Le second est un nouvel edge à insérer, comme le
_uuidfourni 4 n'existe pas dans le graph. - Le troisième est un nouvel edge à insérer, car
_uuidest 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
_idet_uuidsont 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
_idet_uuidsont 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
_uuidexistant donné ne correspond pas avec le node de départ et d'arrivée donnés.