仅通过边缘集合获取节点的ID

时间:2016-05-10 23:25:45

标签: arangodb

我正在编写一个应用程序,它将外部数据存储在ArangoDB中,以便在应用程序内部进行进一步处理。我们假设我在这里Photos讨论Photosets

由于使用API​​的性质,我需要提取Photosets,因为我可以加载Photos。在Photosets API回复中,有一个Photo ID列表,我稍后会用它来获取Photo。所以我创建了一个名为photosInSets的边集合,并将边缘存储在PhotosetsPhotos之间,尽管Photos还没有。

稍后,我需要获取所有需要Photo的列表,以便通过API加载它们。所有ID都是数字。目前,我使用以下AQL查询来获取所有必需Photos的ID:

FOR edge
IN photosInSets
RETURN DISTINCT TO_NUMBER(
  SUBSTITUTE(edge._from, "photos/", "")
)

然而......这看起来不是一个好的解决方案。我希望(至少)摆脱字符串操作以删除集合名称。这样做的好方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以通过photosInSets边缘集合连接到照片集来找到这种方法。

尝试一下如下所示的查询:

FOR e IN photoInSets
LET item = (FOR v IN photos FILTER e._from == v._id RETURN v._key)
RETURN item

这会将photoInSets中的_from引用与photos集合中的_id连接起来,然后从photos中拉出_key,它不会将集合名称作为一部分它的。

查看照片项目,您会看到_id,_key和_rev是系统属性。如果你想要一个字符串,可以使用_key值,没有必要实现你自己的唯一id,除非有一个燃烧的原因你不能公开_key。

通过一点操作,你甚至可以返回一个对象数组,说明哪个photo._key是哪个photoSet的成员,你只需要有两个LET命令并返回两个结果。一看照片,一看照片。

我不是ArangoDB的官方支持,但如果他们有另外一种方式,我感兴趣。