介绍
插入是指向当前图集中插入新的点、边数据;数据中携带的属性将直接赋值,未携带的属性将根据数据类型赋值为空字符串、null、0 等。
插入操作可以向当前图集中单一或批量地插入点、边数据。
- 插入点:可以指定 UUID 和/或 ID,也可以不指定,由系统自动生成。如果指定的 UUID、ID 在图集中已存在,插入会失败。
- 插入边:可以指定 UUID,也可以不指定,由系统自动生成。如果指定的 UUID 在图集中已存在,插入会失败;如果数据中未携带起点/终点,或起点/终点在图集中不存在,插入也会失败。
语法:
- 命令:
insert().into(@<schema>)
- 参数:
nodes()
或edges()
,不支持自定义别名 - 语句别名:支持自定义别名,结构类型为 NODE 或 EDGE
不建议在算法流式返回之后进行插入操作,详见《Ultipa 图分析与图算法》-《算法的使用》-《执行方式》-流式返回
stream()
的相关说明。
// 向当前图集的某个 schema 中插入点数据
insert().into(@<schema>)
.nodes([ //只插入一个点时可省略中括号
{<property1>:<value1>, <property2>:<value2>, ...},
{<property1>:<value1>, <property2>:<value2>, ...},
...
])
// 向当前图集的某个 schema 中插入边数据,必须携带 _from 和 _to,或必须携带 _from_uuid 和 _to_uuid
insert().into(@<schema>)
.edges([ //只插入一个边时可省略中括号
{<property1>:<value1>, <property2>:<value2>, ...},
{<property1>:<value1>, <property2>:<value2>, ...},
...
])
示例:插入两个账户,用账户号作为唯一标识符;一个名称为 graph,账户号为 U001,另一个名称为 database,账户号为 U002;查看系统生成的 UUID
insert().into(@account)
.nodes([{_id: "U001", name: "graph"}, {_id: "U002", name: "database"}]) as nodes
return nodes._uuid
分析:本例为点的插入操作,由于唯一标识符是字符串,可以使用 ID 进行存放。
示例:插入一个交易,用交易号作为唯一标识符;交易号为 TRX001,起始于 C001,结束于 C002,金额 100,交易时间为 2021-01-01 09:00:00;查看系统生成的 UUID
insert().into(@transaction)
.edges({no: "TRX001",
_from: "C001",
_to: "C002",
amount: 100,
time: "2021-01-01 09:00:00"
}) as edges
return edges._uuid
分析:本例为边的插入操作,由于唯一标识符是字符串,且边不支持 ID,故用字符串型属性 no 进行存放,后期查询时可通过对 no 设置索引、LTE 来加速。