2015-10-07 95 views
2

我有一个类似于结构的文件夹树的图形,我想从特定的起点到图形中获取所有的顶点作为叶子。我用下面的AQL查询:从GRAPH_NEIGHBORS中提取顶点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都属于同一个集合。我想知道是否有可能使用子查询。我不明白可能是什么语法。

问候

回答

1

你要通过的GRAPH_NEIGHBORSincludeData -option为true

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

GRAPH_NEIGHBORS为2.6的发布改变行为,之前的版本没有包括所有的结果文档的属性,也许你被这种变化咬伤。

+0

非常感谢,它工作正常。我对阿朗戈来说是新手。反正它有点慢。我终于找到了另一种方式去做 – seb34

0

感谢汤姆的输入,它工作正常,但执行速度有点慢。我是Arango的新手,我评估了一个项目的产品,但是我开始爱上了Arango 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秒。

+0

这似乎是由ArangoDB内部查询引擎进行的“非最优”优化。查询完全一样,所以它们应该同样快。我会研究它来改善它;) – mchacki

+0

不完全相同。在一种情况下,您可以为您在图表中找到的每个顶点请求Document集合,在我的情况下,我只需要浏览一次Document集合并进行过滤。我认为使用“vertexCollectionRestriction”的算法试图快速获取数据,并且不要等待获得所有结果,如果结果很大但效率较低,则不会消耗太多内存。如果我们使用“vertexCollectionRestriction”,那么会有一种“批量大小”参数让引擎加载数据而不是实时加载数据。 – seb34