AQL中的递归遍历(ArangoDb)

Recursive traversal in AQL (ArangoDb)

在遍历树或图(在我的例子中是 DAG)时,我经常看到递归的使用。 AQL 是否支持或计划在不久的将来支持此功能?

假设我有一个 AQL 查询或子查询(遍历)并且想递归调用它。也许可以用 Foxx 包装完成?

就目前情况而言,AQL 本身没有递归。 可以使用 JavaScript 中的递归将递归包装在 Foxx 中,例如:

var recursion = function(last) {
  if (last.length > 3) {
    return last;
  }
  return recursion(db._query("<some AQL query>", {last: last}));
}


controller.get("/recursive", function (req, res) {
  res.json(recursion(["a","b","c"]));
}

对于图形遍历,我们计划使用一些运算符扩展 AQL,以在遍历路径上定义 "For All" 或 "For Any" 过滤器。可以直接处理许多模式。语法可能如下所示:

FOR v,e,p IN 1..12 OUTBOUND "vertex/start" edges
  FILTER p.vertices[*].age ALL >= 35
  RETURN v

这将找到长度为 112 的所有路径,其中所有顶点的 age 属性大于或等于 35

希望对您有所帮助。