我正在使用ArangoDB 2.8
我正在进行包含2个不同集合的遍历查询。但是在我的结果中我想只得到一个特定的集合,但我没有看到按集合名称过滤的方法。
在我的情况下,我有address
个收集和user
集合。在address
集合中,我将3个级别区分为:{addressType:state},{addressType:city}和{addressType:street}。然后我有一个从address
到user
集合(州> city> street>用户)链接的边缘。我想从address
(任何类型)到user
(如果有的话)进行遍历(如下面的代码中),并且仅返回类型user
的集合--for例如,如果街道没有指向用户的链接,则返回空 - 。
For p in TRAVERSAL(address, myEdge, @vertex_id, 'outbound', {paths:false})
RETURN p.vertex._id)
答案 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 answer和migration 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)