ArangoDB:遍历查询中按集合类型筛选

ArangoDB:遍历查询中按集合类型筛选,arangodb,aql,Arangodb,Aql,我正在使用Arangodb2.8 我正在做一个包含两个不同集合的遍历查询。然而,在我的结果中,我只希望得到一个特定的集合,但我看不到按集合名称过滤的方法 就我而言,我有地址集合和用户集合。在address集合中,我将3个级别区分为:{addressType:state}、{addressType:city}和{addressType:street}。然后,我有一个从地址链接到用户集合(州>城市>街道>用户)的边缘。我想从地址(任何类型)到用户(如果有)进行遍历(如下图所示),只返回类型用户的集合

我正在使用Arangodb2.8

我正在做一个包含两个不同集合的遍历查询。然而,在我的结果中,我只希望得到一个特定的集合,但我看不到按集合名称过滤的方法

就我而言,我有
地址
集合和
用户
集合。在
address
集合中,我将3个级别区分为:{addressType:state}、{addressType:city}和{addressType:street}。然后,我有一个从
地址
链接到
用户
集合(州>城市>街道>用户)的边缘。我想从
地址
(任何类型)到
用户
(如果有)进行遍历(如下图所示),只返回类型
用户
的集合-例如,如果街道没有指向用户的链接,则返回空-

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

嗯,我必须找到一个解决方案,所以这里是我的(我知道这不是最好的,但对我来说很有用):

我要做的是将
\u 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)

另一个答案是使用
is_SAME_COLLECTION
函数,如下所示:

或者,由于在Arangodb3.0+(和)中删除了
遍历
,类似于

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