插入数据

在前面几个章节,描述了如何在 Ultipa 服务中,使用 UQL 进行数据检索,后面的章节将会描述如何使用 UQL 对数据进行其他操作。比如:插入,修改,删除等。

本章将会介绍如何插入数据。

插入数据的 [命令]insert() 或者 upsert()

插入数据的 [参数]nodes() 或者 edges()

插入数据的 [返回] 为 新创建的 ID 列表

注意:对于携带了图集中 '已经存在的 _id 或 _o' 的情况,如果使用的是 insert() 命令,插入会失败,如果使用的是 upsert() 命令,将执行更新操作。

插入点(node)数据

通过 UQL 可以轻松的插入新的点数据,点的数据插入支持单一或者批量插入。

在插入点数据时,未携带的属性将由系统自动生成;若同时携带了 _id 和 _o,则仅对 _id 是否已存在进行判断。

_o 即原始 ID, 是点独有的属性。如第一章中的《一些术语》部分所描述的一样,原始 ID 可以是用户在导入 Ultipa 计算中台之前的数据 ID,是一个最大长度为 128 字节的字符串,若超过长度限制,系统会自动截断。点的原始 ID 与 Ultipa ID 是一一对应的。

插入点的语法如下:

insert().nodes([<node>, <node>, ...])

插入更新点的语法如下:

upsert().nodes([<node>, <node>, ...])

示例 1:插入点,设置 name 为 Ultipa,年龄为 1

insert().nodes([{ name: "Ultipa", age: 1 }])

示例 2:插入两个点,分别设置 name 为 graph 和 database

insert().nodes([{ name: "graph" }, { name: "database" }])

示例 3:插入更新 点( _id = 1 ) 的 原始 ID 和 属性 name

upsert().nodes({ _id: 1, _o: "Ultiple0001", name: "ultipa" })

示例:插入更新 点( _id = 2 ),name 为 ultipa;若该点不存在,则使用系统自动生成值补齐_o 原始 ID

upsert().nodes({ _id: 2, name: "ultipa" })

插入边(edge)数据

插入边,也就是将 Ultipa 图系统中的两点相连,并赋予一些属性。因此,在插入边之前,要确保对应的两个端点存在,即 _from_id 和 _to_id 对应的点 或 _from_o 和 _to_o 对应的点已经存在于 Ultipa 图系统当中,否则操作会失败。

边的插入也同样支持单一和批量插入。

在插入点数据时,未携带的属性将由系统自动生成;若携带了 _id,则会对 _id 是否已存在进行判断。

插入边的语法如下:

insert().edges([<edge>,<edge>,...])

插入更新边的语法如下:

upsert().edges([<edge>,<edge>,...])

示例 1:插入边,起始 node(id=1), 结束 node(id=2), 并设置 name 为 works_for

insert().edges([{ _from_id: 1, _to_id: 2, name: "works_for" }])

示例 2:插入两条边,

  1. 起始 node(id=1), 结束 node(id=2), 并设置 name 为 works_for
  2. 起始 node(id=2), 结束 node(id=3), 并设置 name 为 college
insert().edges([
  { _from_id: 1, _to_id: 2, name: "works_for" },
  { _from_id: 2, _to_id: 3, name: "college" }
])

示例 3:改写上例,使用 _from_o 和 _to_o 进行插入:

insert().edges([
  { _from_o: "uuid-1-1", _to_o: "uuid-1-2", name: "works_for" },
  { _from_o: "uuid-2-1", _to_o: "uuid-2-2", name: "college" }
])

静默插入

成功插入后数据会返回新的 点 或者 边 的 ID,在很多批量导入操作当中,我们不需要新的 ID,只需要返回操作状态即可,那么这个时候可以启动静默插入。

静默插入的使用方法很简单:增加 [参数]silent()

示例;插入一个点,只返回最终执行的状态:

insert()
  .nodes([{ name: "Ultipa", age: 1 }])
  .silent();