计算AQL中遍历的不同节点

时间:2019-01-18 15:35:19

标签: arangodb aql

我能够从查询中获取所有不同的节点,但不能获取计数:

FOR v in 2..2 OUTBOUND "starting_node" GRAPH "some_graph"
return DISTINCT v._key

我只想获取结果计数。我尝试将LENGTH(DISTINCT v._key)用作suggested in the docs,但这不是AQL的正确语法:

  

语法错误,“ DISTINCT v._key)”附近出现意外的DISTINCT修饰符

幼稚的解决方案是获取所有密钥并在客户端进行计数,但是我很好奇如何在服务器端进行操作?

2 个答案:

答案 0 :(得分:1)

RETURN DISTINCT的作用是删除重复的值,但仅在遍历之后

您可以设置遍历选项以消除遍历过程中的路径 ,这会更加有效,尤其是当您具有高度互连的图形和较高的遍历深度时:

RETURN LENGTH(
  FOR v IN 2..2 OUTBOUND "starting_node" GRAPH "some_graph"
  OPTIONS { uniqueVertices: "global", bfs: true }
    RETURN v._key
)

可以将遍历选项uniqueVertices设置为"global",这样就不会从两次遍历中得到相同的顶点。需要启用宽度优先搜索 bfs选项才能使用uniqueVertices: "global"深度优先搜索不支持此唯一性选项的原因是结果不确定,因此此组合被禁用。

答案 1 :(得分:0)

受此博客文章http://jsteemann.github.io/blog/2014/12/12/aql-improvements-for-24/的启发,我使用LET准备了解决方案:

LET result = (FOR v in 2..2 OUTBOUND "starting_node" GRAPH "some_graph"
                  return DISTINCT v._key)
RETURN LENGTH(result)

这可能不是最佳解决方案,但它按我的预期工作。