场景是这样的:我有一个包含项目的 ArangoDB 集合,以及另一个包含标签的集合。我正在使用图表,并且我有一个名为“包含”的边缘集合连接项目和标签。一个项目有多个标签。
现在我正在尝试搜索包含多个标签的项目。例如,包含标签“photography”、“portrait”和“faces”的项目。
我的一般方法是从每个标签顶点开始一个图遍历,并找到与该标签相关的项目。那部分工作正常。我得到一个项目清单。
但我任务的最后一部分是对所有列表进行交集,以便找到包含所有指定标签的项目。我无法弄清楚如何做到这一点。
我想做的是这样的:
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)
但是,它不起作用:INTERSECTION 函数不适用于单个列表,而是适用于多个项目,例如:INTERSECTION(listA, listB, listC...)。
如何使 FOR .. RETURN 块中的列表相交?