2

私は ArangoDB に比較的慣れていません。ドキュメントを読んだ後、新しいプロジェクトに実装しようとしています。

ドキュメントのコレクションがあり、各ドキュメントには多くの用語を含むリストがあります。私は Java ドライバーを使用しており、リスト内の要素のいずれかに一致するリストを持つドキュメントを照会したいと考えています。

例:

Document 1
{
    tokens["blue", "red", "green"]
}

Document 2
{
    tokens["black", "red", "yellow"]
}

myArrayList:
["purple", "red"]

使用して照会しようとしている ArrayList には「red」という単語が含まれているため、ドキュメント 1 とドキュメント 2 の両方が表示されるはずです。理想的には、ドキュメント ID と一致する色のみが表示されます。

私がAQLについて知っていることからの半分の疑似コードで:

FOR document IN documents FILTER document.tokens CONTAINS myArrayList RETURN document.token.color && document._id

私は通常、ドキュメント オブジェクト全体を返し、必要なものにアクセスしていました。それがもっと簡単なら、私はそれをすることができます。例えば:

FOR document IN documents FILTER document.tokens CONTAINS myArrayList RETURN document
4

3 に答える 3

1

ArangoDB Google Group で私の質問に対する回答を見つけました。解決策を見つけるのが非常に困難だったので、リンクしています: h ttps://groups.google.com/forum/#!newtopic/arangodb/arangodb/fen4Nr7N4Uo

私は自分のケースで機能するようにコードを調整しました: (私が書いたものを修正するための stj のコメントへのクレジット)

FOR document IN documents LET contains = 
(FOR color IN document.tokens FILTER MATCHES(color, @myArrayList) RETURN color)
FILTER LENGTH(contains) > 0 RETURN document
于 2015-01-09T00:43:12.793 に答える
0

少なくとも指定されたすべての色を任意の順序で含むドキュメントを検索する場合は、次のようなクエリを使用できます。

LET lenArrayList = LENGTH(@myArrayList)

FOR doc IN documents
    FILTER HAS(doc, "tokens") // avoid bad calls to INTERSECTION()
    FILTER LENGTH(INTERSECTION(@myArrayList, doc.tokens)) == lenArrayList
    RETURN doc

myArrayList:["yellow","red"]

結果: ドキュメント 2。これには赤と黄色が含まれているためです。

于 2015-01-16T17:59:41.353 に答える