连接到多个其他节点的arangodb节点

连接到多个其他节点的arangodb节点,arangodb,aql,Arangodb,Aql,我刚刚开始使用arangodb,并解决了我的第一个真正问题: 是否可以搜索连接到所有其他多个节点的节点?这似乎是graph db的基本操作,但我想不出解决方案 作为参考,如果我们以“知道”为例,我想知道哪些人知道Charlie和Dave(应该只有Bob) (尚不允许嵌入图像) 现在我最好的猜测是开始遍历所有的“目标”,然后自己减少和过滤响应,这真的是唯一的方法吗 编辑: 好的,为了进一步说明我添加了另一个连接,eve也认识dave,但不应该返回,因为她不认识charlie 编辑2: 到目前为止,

我刚刚开始使用arangodb,并解决了我的第一个真正问题:

是否可以搜索连接到所有其他多个节点的节点?这似乎是graph db的基本操作,但我想不出解决方案

作为参考,如果我们以“知道”为例,我想知道哪些人知道Charlie和Dave(应该只有Bob)

(尚不允许嵌入图像)

现在我最好的猜测是开始遍历所有的“目标”,然后自己减少和过滤响应,这真的是唯一的方法吗

编辑: 好的,为了进一步说明我添加了另一个连接,eve也认识dave,但不应该返回,因为她不认识charlie

编辑2: 到目前为止,我已经提出了这个问题

FOR start IN ['persons/charlie', 'persons/dave']
LET knownBy = (FOR v,e,p IN 1 INBOUND start knows
    RETURN v)
FOR p IN knownBy
    COLLECT person = p
    LET knows = (FOR v IN 1 OUTBOUND person._id knows
        RETURN v._id)
    FILTER knows ALL IN ['persons/charlie', 'persons/dave']
    RETURN person

然而,这感觉有点不自然,让“X”认识的人得到“X”认识的人。。。此外,探查器显示大约三分之一的时间用于优化计划,必须有更好的解决方案,对吗?

如果我们以已知为例,只搜索两个连接的顶点,则可以在深度为2的一个目标上开始遍历,并过滤路径上的第三个顶点必须是第二个目标,然后可以返回路径上的第二个顶点

FOR v, e, p IN 2 ANY 'persons/charlie' knows
  FILTER p.vertices[2]._id == 'persons/dave'
  RETURN p.vertices[1]
如果搜索两个以上的顶点,下面的查询应该可以正常工作。它开始深度为1的遍历,收集邻居的每个_id,并检查邻居中包含的所有目标

LET targets = ['persons/charlie','persons/dave']

FOR person IN persons
  FILTER targets ALL IN FLATTEN((
    FOR v, e, p IN 1 ANY person._id knows
    RETURN v._id
  ))
  RETURN person

如果我们以knows为例,只搜索两个连接的顶点,则可以在深度为2的一个目标上开始遍历,并过滤路径上的第三个顶点必须是第二个目标,然后只返回路径上的第二个顶点

FOR v, e, p IN 2 ANY 'persons/charlie' knows
  FILTER p.vertices[2]._id == 'persons/dave'
  RETURN p.vertices[1]
如果搜索两个以上的顶点,下面的查询应该可以正常工作。它开始深度为1的遍历,收集邻居的每个_id,并检查邻居中包含的所有目标

LET targets = ['persons/charlie','persons/dave']

FOR person IN persons
  FILTER targets ALL IN FLATTEN((
    FOR v, e, p IN 1 ANY person._id knows
    RETURN v._id
  ))
  RETURN person