3

是否有可能获得一个在 orientdb 中插入边缘的示例。如果它不存在,是否有办法检查边缘是否存在,如果存在,则只需更新边缘,否则创建新边缘。我正在使用 Orientdb 2.1.13 版本。谢谢

4

2 回答 2

5

通过 SQL,您可以使用基本的 UPDATE 命令

update written_by SET out = #9:2, in = #16:43, prop="gianni" UPSERT WHERE out = #9:2 and in = #16:43

http://orientdb.com/docs/last/SQL-Update.html

于 2016-06-28T08:52:03.350 回答
1

当您使用“updatewritten_by SET out = #9:2, in = #16:43, prop="gianni" UPSERT WHERE out = #9:2 and in = #16:43”时,它不能正常工作边:如果边不存在,它将创建边,但不会在顶点中创建输入和输出属性,因此,例如,您将无法查询 MATCH。它以这种方式工作,因为“UPDATE/UPSERT 在文档级别工作,因此它不会从顶点创建连接。正如作者所说,使用它,您将得到一个损坏的图表。

但是你可以从 3.0.1 版本开始对边缘使用“upsert”,它会正常工作——但你需要执行以下操作:

在 edge_class (out, in) 上创建唯一索引 - 这很奇怪 - 顺序很重要!为此,您需要先创建 in 和 out 属性,否则 db 无法创建索引,并且当您尝试运行“创建索引”命令时会出现异常。然后,使用命令 CREATE EDGE UPSERT FROM TO 。

在这种情况下,只有当它不存在时才会创建边缘,并且它会为顶点类创建输入和输出属性。

于 2020-05-06T18:04:34.787 回答