2016-09-01 3 views
3

ArangoDB 3.0を使用しています。AからBへの最短パスを取得するAQLクエリを作成したいと思います。ArangoDB:エッジで最短パスのフィルタリングを行う方法

クエリの "ArangoDB 2.0" バージョンは、以下のことをしたいと思います:

FOR e IN GRAPH_SHORTEST_PATH('CityGraph', 'city/rome', 'city/turin', 
    { 
    edgeExamples: [{filterProperty: 'FIRST'}, {filterProperty: 'SECOND' }]} 
) 

私はドキュメントにおよそarangoDB 3.0(https://docs.arangodb.com/3.0/AQL/Graphs/ShortestPath.html)を読んで、それは言う:

条件付き最短をパス

SHORTEST_PATH計算では、無条件の最短の パスのみが検索されます。この構成では、条件 を定義することはできません。「すべてのエッジがタイプXである最短パスを検索する」。 これを行う場合は、通常のトラバーサルを使用して、代わりにオプション{bfs: true}をLIMIT 1と組み合わせて使用​​します。

誰かが私にそれを行うことができるAQLクエリのタイプを教えてもらえますか? ANY '街/ローマ' GRAPH 'CityGraph' OPTIONS {BFS: 真} 1..3においてNが

、E: FILTER e.filterProperty IN [」 は提案をよると、私はこれを書きますFIRST」、 '第2'] LIMIT 1リターン{N、E}

しかし、代わりに、nの深さのグラフ深さの最初のレベルを返します。

ありがとうございます。 LIMIT 1

敬具、

ダニエル

答えて

2

あなただけの最短経路を得るためにあなたのAQLの結果セットを制限するために指定します。

上記のクエリの翻訳は次のようになります。

FOR n, e, p IN 1..3 ANY 'city/rome' 
    GRAPH 'CityGraph' 
    OPTIONS {bfs: true} 
    FILTER p.edges[*].filterProperty ALL IN ['FIRST', 'SECOND'] 
    FILTER n._key == 'turin' 
    LIMIT 1 
    RETURN {n, e} 
  • これら二つのうちの一つせずにエッジが渡された場合は、FIRSTまたはSECONDのいずれかのfilterPropertyを持っているすべてのエッジをフィルタリングし、このパスは破棄されます。
  • 最短パスの終了ノードはturinです。
+0

私は「LIMIT 1」について見ていますが、ドキュメントに書かれています。 逆に、私は古いGRAPH_SHORTEST_PATHと同じ方法で、startNodeとendNodeの間のパスを知りたいと思います。 –

+0

こんにちは@DanieleBortoluzzi、私はあなたの質問に実際に一致する答えの内容を変更しました。混乱させて申し訳ありません。 – dothebart

+0

AQL最短経路にある "weight"パラメータでこの構造体を使用できるかどうかは誰でも知っていますか? –

関連する問題