Graph 从图\邻域AQL查询中提取顶点

Graph 从图\邻域AQL查询中提取顶点,graph,arangodb,vertices,aql,Graph,Arangodb,Vertices,Aql,我有一个类似文件夹树结构的图,我想把所有顶点作为叶子从特定的起点放到图中。我使用了以下AQL查询: FOR V in GRAPH_NEIGHBORS( "FolderTree", { "folderpath" : "/Cabinet 000001"}, { direction : 'outbound', maxDepth : 20,

我有一个类似文件夹树结构的图,我想把所有顶点作为叶子从特定的起点放到图中。我使用了以下AQL查询:

FOR V in 
      GRAPH_NEIGHBORS( "FolderTree",
                       { "folderpath" : "/Cabinet 000001"},
                       { direction : 'outbound', 
                         maxDepth : 20,
                         vertexCollectionRestriction : 'Document'})
return V
查询工作正常,但我只在结果中获取内部句柄ID:

["Document/4592118051","Document/4598606115","Document/4588185891",....]
因此,我希望将记录列表放入集合,而不是内部ID。所有内部ID都属于同一集合。我想知道是否可以使用子查询。我不明白语法是什么


视为您必须将
GRAPH\u neights
includeData
选项传递为
true

FOR V in 
  GRAPH_NEIGHBORS("FolderTree",
                   {"folderpath" : "/Cabinet 000001"},
                   { direction : 'outbound',
                     maxDepth : 20,
                     vertexCollectionRestriction : 'Document',
                     includeData: true}
   ) 
return V

随着2.6的发布,
GRAPH\u neights
的行为发生了变化,以前的版本确实在结果中包含了所有文档属性,可能是您受到了这种变化的影响。

感谢Tom的输入,它工作得很好,但执行有点慢。我是Arango的新手,我为一个项目评估产品,但我开始爱上Arango DB,它是一个非常完整的DB,现在它非常棒

对于我的第一个问题,我找到了另一种使用临时数组的方法。仅当结果有限时才适用。就我而言,我有近1000条记录:

LET docs = (FOR V in  GRAPH_NEIGHBORS("FolderTree",{"folderpath" : "/Cabinet 000001"},{direction : 'outbound', maxDepth : 10,vertexCollectionRestriction : 'Document'}) RETURN V)
FOR docid in docs
  FOR doc in Document
  FILTER doc._id==docid
  return doc

这一个需要5秒来加载1000条记录,另一个需要25秒。

非常感谢,它工作正常。我是阿兰戈的新手。不管怎么说,它有点慢。我终于找到了另一种方法这似乎是ArangoDBs内部查询引擎的“非最优”优化。查询执行完全相同的操作,因此它们的速度应该相同。我将研究它以改进它;)其实不一样。在一种情况下,对于在图形中找到的每个顶点,您都会向文档集合中请求,在我的情况下,我只需要浏览文档集合一次并进行筛选。我假设使用“vertexCollectionRestriction”的算法尝试动态获取数据,而不是等待所有结果,如果结果较大但效率较低,则不消耗太多内存是一个很好的解决方案。如果我们使用“vertexCollectionRestriction”,那么有一种“batch size”参数会很有趣,可以让引擎按批次而不是动态加载数据。