ArangoDB:从节点数组中获取所有链接

ArangoDB: Get all links out of an array of nodes

和 CoDEManX 的出色回答之后,我想问一下如何使用以前的结果(返回的节点数组)来查询该集合中的所有链接。

基本上我打算使用

的结果
FOR v IN 0..100 ANY "Entity/node_id" 
EntityRelation OPTIONS      
{uniqueVertices: "global"}
RETURN v._key

查询链接:

"FOR c IN EntityRelation FILTER c._from==" + "\"" + 
node._id + "\"" + " OR c._to==" + "\"" + 
node._id + "\"" + " RETURN c";

我该如何处理?

我不确定你到底想达到什么目的,但这里有两种可能的解决方案:

FOR v IN 0..100 ANY "Entity/node_id" EntityRelation OPTIONS {uniqueVertices: "global"}
  FOR vv, c IN ANY v EntityRelation
    RETURN c

上述查询使用嵌套的for循环(实际上是遍历)对外层遍历返回的每个节点进行一次遍历,以v为起始顶点,忽略边的方向。返回整个内遍历的边文档。

如果你想要外遍历的边缘,这甚至没有必要:

FOR v, e IN 0..100 ANY "Entity/node_id" EntityRelation OPTIONS {uniqueVertices: "global"}
  RETURN e

如果您想稍后在查询中访问遍历结果,请将其转换为子查询并将结果分配给变量:

LET nodes = (
  FOR v IN 0..100 ANY "Entity/node_id" EntityRelation OPTIONS {uniqueVertices: "global"}
    RETURN v._id
)
FOR node IN nodes
  FOR vv, c IN ANY node EntityRelation
    RETURN c

注意第一次遍历returns只有文档ID。它们足以从这些节点开始另一次遍历,并且无论如何都不会在该查询中使用顶点的其他属性。返回整个文档也可以,但效率不高。