我们可以在 orientdb 中更新一条边吗?

Can we UPSERT an EDGE in orientdb?

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

通过SQL您可以使用基本的更新命令

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

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

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

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

在这种情况下,只有当边不存在时才会创建边,并且会为顶点 类.

创建 in 和 out 属性