ArangoDB:在遍历查询中按集合类型过滤

时间:2016-10-26 07:59:21

标签: arangodb aql

我正在使用ArangoDB 2.8

我正在进行包含2个不同集合的遍历查询。但是在我的结果中我想只得到一个特定的集合,但我没有看到按集合名称过滤的方法。

在我的情况下,我有address个收集和user集合。在address集合中,我将3个级别区分为:{addressType:state},{addressType:city}和{addressType:street}。然后我有一个从addressuser集合(州> city> street>用户)链接的边缘。我想从address(任何类型)到user(如果有的话)进行遍历(如下面的代码中),并且仅返回类型user的集合--for例如,如果街道没有指向用户的链接,则返回空 - 。

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

2 个答案:

答案 0 :(得分:3)

另一个答案是使用this SO answer暗示的IS_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)

或者,因为在{ArangoDB 3.0+(see this answermigration guide)中删除了TRAVERSAL,所以

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

答案 1 :(得分: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)