2016-05-03 57 views
1

我試圖修剪一個遍歷。當我使用AQL GRAPH_TRAVERSAL函數時,它按預期工作。但是,使用GRAPH_TRAVERSAL_TREE更改GRAPH_TRAVERSAL函數會擴展整個樹,超過filterVertices示例。GRAPH_TRAVERSAL_TREE忽略filterVertices,GRAPH_TRAVERSAL不是

當我從GRAPH_TRAVERSAL移動到GRAPH_TRAVERSAL_TREE時,是否需要更改一些內容?

回答

1

在試圖重現您的問題時,我陷入了一個類似的陷阱:我忘記了GRAPH_TRAVERSAL_TREE() - 函數的一個參數,然後返回比預期更多的結果。當參數的數目是正確的,我們可以比較traversal over the city graph

未經過濾的,我們也將看到Paris並在結果集中背後的節點:

FOR e IN GRAPH_TRAVERSAL_TREE('routeplanner', 
    'germanCity/Hamburg', 
    'outbound', 
    'connection') RETURN e" 

如果我們篩選isCapital == false,這些節點將失蹤:

FOR e IN GRAPH_TRAVERSAL_TREE('routeplanner', 
    'germanCity/Hamburg', 
    'outbound', 
    'connection', 
    {filterVertices: [{isCapital: false }]}) RETURN e 

請注意與'connection'字符串,它指定如何命名在結果子屬性參數。如果您忘記了它,選項對象將取代它的位置,並且您將在結果中看到諸如'[object Object]'之類的關鍵名稱,並且過濾器不起作用。

+0

FOR V IN GRAPH_TRAVERSAL('gdp2_graph',[{_ id:'pmsite/527362551703'}],'outbound',{strategy:'depthfirst',edgeCollectionRestriction:'pm_child',vertexFilterMethod:['prune','exclude '],filterVertices:[{kind:'site'},{kind:'path_1'},{kind:'path_2'},{kind:'project'}]})RETURN v This works。但是,我想獲得父親<->子關係,所以我將其更改爲GRAPH_TRAVERSAL_TREE,它給了我樹,但沒有停在GRAPH_TRAVERSAL所在的相同點上。 我已經得到了替代形式的FOR .. IN給我我需要的東西,但我只是想提醒你這個異常。 – ggendel

+0

正如上一段所述,您需要在模式匹配的對象之前添加'connectName'參數。但爲了確保模式匹配遍歷在GRAPH_TRAVERSAL(_TREE)之上, – dothebart