Arangodb 从AQL遍历返回顶点和边的单个文档

Arangodb 从AQL遍历返回顶点和边的单个文档,arangodb,graph-traversal,Arangodb,Graph Traversal,当我在Arango中进行遍历时,会得到一个json结构数组,如下所示: { "vertex" : { "_id" : "vertices/857831247835", "_key" : "857831247835", "_rev" : "857831247835", }, "path" : { "edges" : [ { "_id" : "edges/857831575515", "_key" : "85783157

当我在Arango中进行遍历时,会得到一个json结构数组,如下所示:

{
  "vertex" : {
    "_id" : "vertices/857831247835",
    "_key" : "857831247835",
    "_rev" : "857831247835",
  },
  "path" : {
    "edges" : [
      {
      "_id" : "edges/857831575515",
      "_key" : "857831575515",
      "_rev" : "857831575515",
      "_from" : "vertices/857831247835",
      "_to" : "vertices/857821417435",
    }
    ],
    "vertices" : [
      {
      "_id" : "vertices/857821417435",
      "_key" : "857821417435",
      "_rev" : "857821417435",
    },
    {
      "_id" : "vertices/857831247835",
      "_key" : "857831247835",
      "_rev" : "857831247835",
    }
    ]
  },
  "startVertex" : "vertices/857821417435"
}

有没有一种方法可以使用AQL将遍历中找到的所有边/顶点合并到一个单独的结构中,如上面的结构?

您实际上可以使用两种方法来获得结果:

扩展AQL查询的简便方法:

对于x IN()返回{边:x.path.edges,顶点:x.path.vertex,顶点:x.vertex,startVertex:x.startVertex}

更高效的方式(缩短对象创建的时间): 按照以下步骤注册用户定义的函数: 一次使用arangosh

这应该是这样的:

{
  "vertex" : {
    "_id" : "vertices/857831247835",
    "_key" : "857831247835",
    "_rev" : "857831247835",
  },
  "path" : {
    "edges" : [
      {
      "_id" : "edges/857831575515",
      "_key" : "857831575515",
      "_rev" : "857831575515",
      "_from" : "vertices/857831247835",
      "_to" : "vertices/857821417435",
    }
    ],
    "vertices" : [
      {
      "_id" : "vertices/857821417435",
      "_key" : "857821417435",
      "_rev" : "857821417435",
    },
    {
      "_id" : "vertices/857831247835",
      "_key" : "857831247835",
      "_rev" : "857831247835",
    }
    ]
  },
  "startVertex" : "vertices/857821417435"
}

要求(“org/arangodb/aql/functions”)。注册(“myVisitors::flatVisitor”,
函数(配置、结果、顶点、路径){
push({顶点:顶点,边:path.edges,顶点:path.vertex});
});

然后在AQL中添加附加选项
访问者:“myVisitors::flatVisitor”
路径:true
相同

顺便说一句:
path:true在这种情况下将被忽略,因为它仅用于我们的默认访问者


提示:如果您只需要结果中的某些属性而不是完整文档中的某些属性,请在访问者中返回这些属性。这将大大提高性能。

有点老了,但为了这个问题的新访问者。 另一种方法是从路径唯一地累积边(语法为arangojs官方客户端):


你能提供一个例子说明结果结构应该是什么样子吗?确切地说是那里的结构,除了顶点和边数组中放置的所有被遍历的顶点和边:{顶点:{},顶点:[…所有顶点!…],边:[…所有边!!…],startVertex:“}”。我觉得应该可以向遍历函数传递一个选项,以指定以这种方式格式化的结果。。。有点像我如何通过“路径:真/假”。