这种情况是这样的:我有一个包含项目的ArangoDB集合和另一个包含标签的集合。我正在使用图形,并且我有一个名为“Contains”的边缘集合,用于连接项目和标签。一个项目有多个标签。ArangoDB中(n)阵列的交互AQL
现在我正在尝试搜索包含多个标签的项目。例如。包含标签“摄影”,“肖像”和“面孔”的项目。
我的一般方法是从每个标签顶点开始图遍历并找到与该标签相关的项。这部分工作正常。我得到一个项目列表。
但我的任务的最后一部分是为了找到包含所有指定标签的项目的所有列表的交集。我无法解决如何做到这一点。
我想做的事是这样的:
let tagnames = SPLIT(@tagnames,',')
let tagcollections = (
FOR tagname IN tagnames
LET atag = (FOR t IN tags FILTER LOWER(t.text)==LOWER(tagname) RETURN t)
let collections = (FOR v IN 1..1 INBOUND atag[0] Contains RETURN v)
RETURN { tag: atag, collections: collections }
)
RETURN INTERSECTION(tagcollections)
但是,这是行不通的:交集功能没有一个单独的列表上工作,但多个项目,像这样的:交会( listA,listB,listC ...)。
如何在FOR .. RETURN块中找到列表的交集?
,并希望得到的路口,你可能希望使用APPLY()来传播数组,并将每个列表作为单独的参数传递:'APPLY(“INTERSECTION”,[listA,listB,listC])''。它与'INTERSECTION(listA,listB,listC)'相同,但输入数组的长度可变。 – CoDEmanX
我认为你的评论是我正在寻找的答案。尽管其他评论非常有用,但您的回答直接回答了我的问题。但我不能将它标记为正确的答案,当它是一个评论... –
我张贴了一个扩展的答案:http://stackoverflow.com/a/38484463/2044940如果它解决您的问题,请接受并投票表决,谢谢! – CoDEmanX