2017-03-27 13 views
0

問題:私はスタートノードを持っており、特定のプロパティを持つノードを探しています。しかし、私はノードが最短のものに接続したいだけです。ArangoDB:条件付き最短経路をすべて見つけてください

例:緑色のノードは、プロパティセットを持っていますが、「E」は、これまでに得たものアイブ

graph

長いパスを持っているので、私は、バックだけで「A」と「C」をしたいです:

LET source = (FOR x IN Entity FILTER x.objectID == @nodeId 
    return x)[0] 
FOR node, edge, path IN 1..5 ANY source._id GRAPH 'm' 
FILTER CONTAINS(node.label, @search) 
    LIMIT @limit 
    RETURN path 

が、これはあなたがを使用して起点ノードからの距離を得ることができるだけではなく最短経路

答えて

0

のすべてを返します。 0、あなたがサブクエリにトラバーサルを置く場合は、その後の最短経路長を検索し、その長さによってフィルタリングすることができるように:

LET allMatches = (
    FOR node, edge, path IN 1..3 ANY "[vertex_id]" GRAPH "[my_graph]" 
    FILTER CONTAINS(node.label, @search) 
    LIMIT @limit 
    RETURN {node,path}) 
LET shortestPathLength = MIN(FOR m IN allMatches COLLECT len = LENGTH(m.edges) RETURN len) 
FOR m IN allMatches 
    FILTER LENGTH(m.path.edges) == shortestPathLength 
    RETURN m.node 

1つのクエリでこれを行うためのよりよい方法があるかもしれません(例えば、幅優先追跡をして、何とか止まるようにしていますが)私はそれを見ていません。

関連する問題