ArangoDB 链接文档
Posted
技术标签:
【中文标题】ArangoDB 链接文档【英文标题】:ArangoDB link documents 【发布时间】:2014-12-22 18:11:43 【问题描述】:是否可以像在 OrientDB 中一样链接来自 ArangoDB 中不同集合的文档?
在 OrientDB 中,您可以创建 LINK
类型的字段并指定链接的类型。这会在两个文档之间建立关系。
我是否必须在 ArangoDB 中使用边缘集合来执行此操作?
我正在尝试定义一个主集合和一个辅助集合,其中包含额外的信息来补充主集合。我不想将所有数据都放在主集合中,因为这是在其他实体之间共享的。
提前致谢。
【问题讨论】:
【参考方案1】:其实有两种选择:
使用连接
您可以在包含标识子文档的信息的主文档上定义一个属性(例如,通过其_key
),然后使用 AQL 在您的查询中连接两个文档:
FOR x IN maindocuments
FILTER x.whatever < 42
FOR y in secondarydocuments
FILTER x.sub = y._key
RETURN MERGE(x,y)
使用边缘
您可以定义一个边缘集合来保存文档之间的所有“关系”。边缘文档还可以选择附加关于边缘本身的信息。
FOR x in maindocuments
LET n = NEIGHBORS("maindocuments", "edgecollection", x._id, "any");
RETURN MERGE(x, n[0].vertex);
但是,在 ArangoDB 中没有外键约束之类的东西。您可以参考边缘中不存在的文档或在不通知主文档的情况下删除子文档。
第二种方法的好处是您可以在这些文档之间使用任意数量的边,甚至可以在应用程序运行时决定使用 0、1 或更多,而无需进行任何修改。对于第一种方法,您必须在开始时通过将属性设置为单个值或值列表来决定这一点。
【讨论】:
第一种方法有什么好处吗?是不是例如更容易在查询中使用,不同的性能?以上是关于ArangoDB 链接文档的主要内容,如果未能解决你的问题,请参考以下文章