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