2016-10-26 77 views
1

我使用ArangoDB 2.8ArangoDB:過濾器通過集合類型的遍歷查詢

我做一個遍歷查詢,其中包括2個不同的集合。然而,在我的結果中,我只想得到一個特定的集合,但我沒有看到按集合名稱過濾的方式。

在我的情況下,我有address集合和user集合。在address集合中,我將3個級別區分爲:{addressType:state},{addressType:city}和{addressType:street}。然後我有一個鏈接從addressuser集合(州>城市>街道>用戶)的優勢。我想從address(任何類型)到user(如果有)進行遍歷(如下面的代碼中所示),並且只返回類型爲user的集合 - 例如,如果街道沒有鏈接到用戶然後返回空 - 。

For p in TRAVERSAL(address, myEdge, @vertex_id, 'outbound', {paths:false}) 
    RETURN p.vertex._id) 

回答

1

另一個答案是使用作爲暗示由this SO answerIS_SAME_COLLECTION功能:

FOR p IN TRAVERSAL(address, myEdge, @vertex_id, 'outbound', {paths:false}) 
    FILTER IS_SAME_COLLECTION('user', p.vertex._id) 
    RETURN p.vertex._id) 

,或者因爲TRAVERSAL在ArangoDB除去3.0+(see this answermigration guide),像

FOR v IN 0..5 IN OUTBOUND @vertex_id myEdge 
    FILTER IS_SAME_COLLECTION('user', v._id) 
    RETURN v._id) 
1

嗯,我必須找到一個解決方案,所以這裏是我的(我知道是不是最好的,但工作對我來說):

我做的是通過"/"_id分裂,並檢查是否第一部分(集合名稱)是['user']

For p in TRAVERSAL(address, myEdge, @vertex_id, 'outbound', {paths:false}) 
    FILTER (SPLIT(p.vertex._id, "/", 1)[0]) IN ['user'] 
    RETURN p.vertex._id)