是否可以在ArangoDB中同时创建边和顶点

时间:2017-01-01 01:57:33

标签: database arangodb aql

是否可以通过指定可能存在或不存在的文档来创建边缘,并在它们不存在时创建它们?

例如,如果我运行如下的查询:

INSERT {_to: 'docs/something', _from: 'docs/other'} IN edges

如果已经存在任何docs / something或docs / other,我将收到错误消息。有没有我可以通过的选项,如果它们不存在,会创建docs / something和docs / other(或许是一个空对象)?

注意:我可以批量导入并创建边而不用文档 - _to和/或_from只是无处可去 - 但我宁愿创建一个空白文档

1 个答案:

答案 0 :(得分:1)

Managed Graphs的一个特性是,它确保了图形的完整性。因此,使用the edge management facility将在ArangoDB中结束,不允许插入悬空边缘。

但是,ArangoDBs图形功能是在文档功能之上分层的。文档功能不保证图形完整性;因此inserting edges referencing non existant vertices is possible this way如果边集合存在,您的示例查询将起作用。

然而,quoting the insert documentation

Each INSERT operation is restricted to a single collection,
and the collection name must not be dynamic. 
Only a single INSERT statement per collection is allowed per AQL query,
and it cannot be followed by read operations that access 
the same collection, by traversal operations,
or AQL functions that can read documents.

因此,您无法在同一查询中使用AQL动态创建顶点。

使用ArangoDB 2.8,首先必须存在顶点集合。