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

Dov*_*ovi 3 arangodb aql

我正在使用 ArangoDB 2.8

我正在做一个包含 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)
Run Code Online (Sandbox Code Playgroud)

sun*_*ide 5

另一个答案是使用这个 SO 答案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)
Run Code Online (Sandbox Code Playgroud)

或者,由于TRAVERSAL已在 ArangoDB 3.0+ 中删除(请参阅此答案迁移指南),类似于

FOR v IN 0..5 IN OUTBOUND @vertex_id myEdge
  FILTER IS_SAME_COLLECTION('user', v._id)
   RETURN v._id)
Run Code Online (Sandbox Code Playgroud)