如何使用ArangoDB中的self join访问集合中多个文档的数据

时间:2016-01-19 19:10:35

标签: arangodb aql

我已将数据存储在ArangoDB 2.7.1中,与集合名称DSP一样:

{"content": "Book.xml", "type": "string", "name": "name", "key": 102}

此处,单个集合key表示集合中的单个文档。

现在,我想访问多个文档中具有key属性的类似值的所有文档,或者类型标题和价格,其中类型是计算机"对于相同的FOR p IN DSP filter p.name == "publish_date" AND p.content == "2000-10-01" AND p.name == 'title' return p值。我已经尝试了一个AQL作为publish_date,但这是一个空集,因为它是在单个文档中进行比较,而不是在集合中。

与关系型数据库一样,需要某种自联接,但我不知道如何应用自联接。请告诉我如何使用publish_date为" 2000-10-01"的关键属性的相同值访问所有文档。我希望此查询的结果包含以下文档,因为对应于key且值为2000-10-01,{"content": "Gambardella, Matthew", "type": {"py/type": "__builtin__.str"}, "name": "author", "key": 1031} {"content": "XML Developer's Guide", "type": {"py/type": "__builtin__.str"}, "name": "title", "key": 1031} {"content": "Computer", "type": {"py/type": "__builtin__.str"}, "name": "genre", "key": 1031} {"content": "44.95", "type": {"py/type": "__builtin__.str"}, "name": "price", "key": 1031} {"content": "2000-10-01", "type": {"py/type": "__builtin__.str"}, "name": "publish_date", "key": 1031} {"content": "An in-depth look at creating applications with XML.", "type": {"py/type": "__builtin__.str"}, "name": "description", "key": 1031} 的值为1031:

otool -arch arm64 -l linkedin-sdk | grep '__bitcode'

1 个答案:

答案 0 :(得分:3)

假设发布日期存储在属性name中,并且其值存储在属性content中,您首先需要查找具有该组合的所有文档:

FOR self IN DSP 
  FILTER self.name == 'publish_date' && self.content == '2000-10-01'
  RETURN self

现在,找到这些文档后,您可以再次将它们与DSP集合连接起来,过滤掉具有相同key值的文档,但不包括初始FOR中已找到的文档:

FOR self IN DSP 
  FILTER self.name == 'publish_date' && self.content == '2000-10-01'
  FOR other IN DSP 
    FILTER other.key == self.key && other._key != self._key 
    RETURN { self, other }

如果您总是过滤名称和内容和/或密钥,那么索引这些属性可能是明智的。看起来key本身应该有一个索引。哈希索引应该足够,因为key将始终是相等的。 namecontent(按此顺序)可以放入跳转列表索引。