シナリオは次のとおりです。項目を含む ArangoDB コレクションと、タグを含む別のコレクションがあります。私はグラフを使用しており、アイテムとタグを接続する「Contains」というエッジ コレクションがあります。アイテムには複数のタグがあります。
現在、複数のタグを含むアイテムを検索しようとしています。たとえば、「写真」、「ポートレート」、「顔」のタグを含むアイテム。
私の一般的なアプローチは、各タグの頂点からグラフ トラバーサルを開始し、そのタグに関連するアイテムを見つけることです。その部分はうまく機能します。アイテムのリストを取得します。
しかし、私のタスクの最後の部分は、指定されたすべてのタグを含むアイテムを見つけるために、すべてのリストの共通部分を作成することです。そして、私はこれを行う方法を理解できません。
私がやりたかったことは次のようなものでした:
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 ブロックで見つかったリストの交差を作成するにはどうすればよいですか?