ArangoDBのtraversal objectを使用して、次のサイクルを回避しながら再帰的なグループメンバーシップ構造をトラバースします。 2つの別々のトラバーサルの結果に参加する必要がある場合があります。 AQLを利用してトラバーサル結果に効率的に参加する方法はありますか?私は現在、JavaScriptのメモリに結果に参加しています。ArangoDBでのトラバーサルオブジェクトの結果への結合
0
A
答えて
2
the traversal graphを使用して説明します。私たちはANY
方向に2つのトラバースを行いますので、結果の数は少し大きくなります。我々は、結合操作の結果となる共通点を持つ点で開始します。 1つのクエリでは、A
とE
が表示されます。これはB
が共通している必要がありますが、反復のものは含まれていません。
基本的な反復:
FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v._key
circles/A
から始まって、これはこれは["F", "B"]
になりcircles/E
から始めて、["B","G"]
につながる - そう、その明白な、我々は唯一の参加の結果として"B"
を取得する必要があります。
私たちの最初の可能なアプローチは、2つのサブクエリを使用してINTERSECTION
を使用してそれらを結合することです:
LET firstTraversal = (FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v)
LET secondTraversal = (FOR v IN 1..1 ANY 'circles/E' GRAPH 'traversalGraph' RETURN v)
RETURN INTERSECTION(firstTraversal, secondTraversal)
ここに問題がある可能性が高価になる可能性がある、オブジェクトの完全な深さの比較が行われることを、可能性があり。したがって、別のアプローチは、_key
属性を使用してそれらに参加することができます:
LET firstTraversal = (FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v)
LET secondTraversal = (FOR v IN 1..1 ANY 'circles/E' GRAPH 'traversalGraph' RETURN v)
FOR oneSet IN firstTraversal
FOR otherSet IN secondTraversal
FILTER oneSet._key == otherSet._key RETURN oneSet
関連する問題
- 1. jQueryのモバイルナビゲーションバー結合結果
- 2. Mysql - 結合クエリの結果の合計
- 3. 自己結合からスクエアパンダデータフレームへのSQL結果の変換
- 4. Lucene結果とEntity Frameworkの結果の結合?
- 5. ArangoDB - カスタム関数でaqlの結果をソート
- 6. Sql Serverストアドプロシージャの結果セットの結合
- 7. オーバーレイアイテムへの結合
- 8. 2つの結果を結合する
- 9. ストアドプロシージャの結果セットを結合する
- 10. mysqlクエリの結果を結合する
- 11. MySQL Left Outer Joinと結果の結合
- 12. データフローの結果を結合する
- 13. 結合の結果を制限する
- 14. 2クエリの結果を結合
- 15. 複数の結合結果セット
- 16. ストリーム結合結果のデフォルト値
- 17. foreachループの結果を結合する
- 18. SQL Server:クエリ結果の結合
- 19. 結果2つの結合SQLサーバー
- 20. 左への結合と右への結合
- 21. 辞書へのPyODBC結果
- 22. pyodbc:CSVへのクエリ結果?
- 23. 関数へのコールバック結果
- 24. 結合結果が重複
- 25. 2つのクエリの結果を1つの結果に結合するSQL
- 26. 複数のクエリの結果を1つの結果に結合する方法
- 27. 単一の結果を他の複数の結果と結合するデータブロック
- 28. Fluxからの結果とMonoの結果を合わせる
- 29. 合計結果とPHPの返された結果の比較
- 30. display dql twigで結合した結果
回答が役に立ちましたか?はいの場合は、「受け入れ」とマークできますか?そうでない場合、何が欠けていますか? – dothebart
@dothebartあなたの答えをありがとう。私はチームの優先順位がシフトしたので、最近この問題を見る機会はありませんでしたが、私は過去にあなたの提案に似たものを試しましたが、実際には正しい結果が得られましたが、パフォーマンスは悪かったです。さらに、私の特定の問題には多くのサイクルがあり、同じノードを繰り返し訪れたことでさらにパフォーマンスが低下しました。したがって、訪問された頂点の複数のセット間の交差点を見つけることに加えて、各ツリーの深さが約5程度になる可能性があるため、クエリはサイクルを回避する方法を指定する必要があります。 – user2941476
私はGRAPH_NEIGHBORS関数を使ってサイクルを避けるためにノードから頂点を取得しましたが、複数の呼び出しを行ったり複数の呼び出し結果を交差させたりするとパフォーマンスが低下しました。 – user2941476