Command insert().overwrite()
will either insert one or multiple nodes/edges into the current GraphSet, or overwrite one or multiple existing nodes/edges based on ID.
When executing insert().overwrite()
:
- An insert operation is triggered if ID is not provided, or the provided ID does not exist in the graph;
- An overwrite operation is triggered if the provided ID already exists in the graph, and the mapping of node
_id
and_uuid
, the mapping of ID and schema are not violated; - Cases of failure: the mapping of node
_id
and_uuid
or the mapping of ID and schema are violated; FROM or TO not provided when inserting or overwriting edges, or provided but the nodes they represent do not exist in the graph.
When insert operation is triggered by insert().overwrite()
: same details as insert()
.
When overwrite operation is triggered by insert().overwrite()
:
- Find metadata to be overwritten based on IDs that are provided;
- Same details of custom properties as
insert()
.
It is not suggested to execute overwriting operation after streaming return of an algorithm, see details on
stream()
in document Ultipa Graph Analytics & Algorithms - Using Algorithms - Execution Method.
Syntax:
- Statement alias: supported (NODE or EDGE)
// To overwrite nodes of a certain schema in the current graphset
insert().overwrite().into(@<schema>)
.nodes([ // Square brackets can be omitted if overwrites only one node
{<property1>:<value1>, <property2>:<value2>, ...},
{<property1>:<value1>, <property2>:<value2>, ...},
...
])
// To overwrite edges of a certain schema in the current graphset, must carry _from and _to, or must carry _from_uuid and _to_uuid
insert().overwrite().into(@<schema>)
.edges([ // Square brackets can be omitted if overwrites only one edge
{<property1>:<value1>, <property2>:<value2>, ...},
{<property1>:<value1>, <property2>:<value2>, ...},
...
])
Example: Given an account U001 named "test", overwrite the account if it already exists, otherwise insert the account; check the account information after the operation
insert().overwrite().into(@account)
.nodes({_id: "U001", name: "test"}) as nodes
return nodes{*}
Example: Overwrite transaction edge of UUID = 1 with transaction No. TRX001 and from C001 to C003, or insert such an edge if not existing; insert another transaction edge with No. TRX003 and from C003 to C001 in the same UQL
insert().overwrite().into(@transaction)
.edges([
{no: "TRX001", _from: "C001", _to: "C003", _uuid: 1},
{no: "TRX003", _from: "C003", _to: "C001"}
])