从 AQL 中的遍历计算不同的节点

Count distinct nodes from traversal in AQL

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

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

我只想得到结果的计数。我尝试使用 LENGTH(DISTINCT v._key) as suggested in the docs,但它不是 AQL 的正确语法:

syntax error, unexpected DISTINCT modifier near 'DISTINCT v._key)'

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

受这篇博文的启发 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)

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

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"深度优先搜索不支持这个唯一性选项的原因是结果不是确定性的,因此这个组合被禁用。