我正在编写一个应用程序,它将外部数据存储在ArangoDB中,以便在应用程序内部进行进一步处理。我们假设我在这里Photos
讨论Photosets
。
由于使用API的性质,我需要提取Photosets
,因为我可以加载Photos
。在Photosets
API回复中,有一个Photo
ID列表,我稍后会用它来获取Photo
。所以我创建了一个名为photosInSets
的边集合,并将边缘存储在Photosets
和Photos
之间,尽管Photos
还没有。
稍后,我需要获取所有需要Photo
的列表,以便通过API加载它们。所有ID都是数字。目前,我使用以下AQL查询来获取所有必需Photos
的ID:
FOR edge
IN photosInSets
RETURN DISTINCT TO_NUMBER(
SUBSTITUTE(edge._from, "photos/", "")
)
然而......这看起来不是一个好的解决方案。我希望(至少)摆脱字符串操作以删除集合名称。这样做的好方法是什么?
答案 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的官方支持,但如果他们有另外一种方式,我感兴趣。