ArangoDB链接文档

时间:2014-10-27 14:24:09

标签: join hyperlink document-database arangodb

是否可以链接ArangoDB中不同集合中的文档,就像它在OrientDB中一样?

在OrientDB中,您可以创建LINK类型的字段并指定链接的类型。这创造了两个文件之间的关系。

我是否必须使用边缘集合在ArangoDB中执行此操作?

我正在尝试定义一个主集合和一个辅助集合,其中包含额外的信息以补充主要集合。我不想拥有主集合中的所有数据,因为这是在其他实体之间共享的。

提前致谢。

1 个答案:

答案 0 :(得分:13)

实际上有两种选择:

  1. 使用联接

    您可以在主文档上定义一个属性,其中包含标识子文档的信息(例如,通过其_key),然后使用AQL将查询中的两个文档连接起来:

    FOR x IN maindocuments FILTER x.whatever < 42 FOR y in secondarydocuments FILTER x.sub = y._key RETURN MERGE(x,y)

  2. 使用边缘

    您可以定义包含文档之间所有“关系”的边集合。边缘文档还可以选择边缘本身的附加信息。

    FOR x in maindocuments LET n = NEIGHBORS("maindocuments", "edgecollection", x._id, "any"); RETURN MERGE(x, n[0].vertex);

  3. 然而,在ArangoDB中没有类似外键约束的东西。您可以参考边缘中的不存在的文档或删除子文档而不通知主文档。

    第二种方法的好处是,您可以在这些文档之间使用任意数量的边,甚至可以在应用程序运行期间决定0,1或更多,而无需任何修改。使用第一种方法,您必须在开始时通过将属性设为单个值或值列表来确定。

相关问题