Graph 从图\邻域AQL查询中提取顶点
我有一个类似文件夹树结构的图,我想把所有顶点作为叶子从特定的起点放到图中。我使用了以下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,
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”参数会很有趣,可以让引擎按批次而不是动态加载数据。