Upsert means to update values of properties other than UUID and ID; only properties carried in the data will be updated, while those are not will remain unchanged.
Upsert will insert or update one or multiple nodes/edges in the current graphset:
- Upsert nodes: the operation upserts the data record when specifying either a UUID or an ID that already exists in the GraphSet, or when specifying a UUID-ID pair that exists and obeys the mapping relationship; the operation fails when specifying a UUID-ID pair that violates the mapping relationship in the GraphSet; the operation inserts the data record when specifying a UUID or an ID or a UUID-ID pair that does not exist in the GraphSet, or when not specifying any of them at all.
- Upsert edges: the operation upserts the data record when specifing a UUID that already exists in the GraphSet; the operation inserts the data record when specifying a UUID that does not exist in the GraphSet, or when not specifying the UUID; the operation fails when the start/end node of edge is not included or not existent.
It is not suggested to execute upsert 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 type)
// To upsert nodes of a certain schema in the current graphset
upsert().into(@<schema>)
.nodes([ // Square brackets can be omitted if upsert only one node
{<property1>:<value1>, <property2>:<value2>, ...},
{<property1>:<value1>, <property2>:<value2>, ...},
...
])
// To upsert edges of a certain schema in the current graphset, must carry _from and _to, or must carry _from_uuid and _to_uuid
upsert().into(@<schema>)
.edges([ // Square brackets can be omitted if upsert only one edge
{<property1>:<value1>, <property2>:<value2>, ...},
{<property1>:<value1>, <property2>:<value2>, ...},
...
])
Example: Given an account U001 with name "test", update the account if it already exists, otherwise insert the account; check the account information after the operation
upsert().into(@account)
.nodes({_id: "U001", name: "test"}) as nodes
return nodes{*}
Example: Update 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
upsert().into(@transaction)
.edges([
{no: "TRX001", _from: "C001", _to: "C003", _uuid: 1},
{no: "TRX003", _from: "C003", _to: "C001"}
])