這種情況是這樣的:我有一個包含項目的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