【问题标题】:Extract vertices from GRAPH_NEIGHBORS AQL query从 GRAPH_NEIGHBORS AQL 查询中提取顶点
【发布时间】:2015-10-07 07:43:22
【问题描述】:

我有一个带有文件夹树状结构的图,我想将所有顶点作为叶子从特定起点获取到图中。我使用了以下 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 arangodb vertices aql


    【解决方案1】:

    您必须将GRAPH_NEIGHBORSincludeData 选项作为true 传递。

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

    GRAPH_NEIGHBORS 的行为随着 2.6 的发布而改变,之前的版本确实在结果中包含了所有文档属性,也许你被那个改变咬住了。

    【讨论】:

    • 非常感谢,它工作正常。我是 Arango 的新手。无论如何,它有点慢。我终于找到了另一种方法
    【解决方案2】:

    感谢 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 秒。

    【讨论】:

    • 这似乎是 ArangoDB 内部查询引擎的“非最佳”优化。该查询执行完全相同的操作,因此它们应该同样快。我会研究它以改进它;)
    • 不太一样。在一种情况下,您为在图中找到的每个顶点请求文档集合,在我的情况下,我只需要浏览一次文档集合并过滤。我认为使用“vertexCollectionRestriction”的算法会尝试即时获取数据并且不要等待获得所有结果,如果结果很大但效率较低,这是一个不消耗太多内存的好解决方案。如果我们使用“vertexCollectionRestriction”,那么有一种“批量大小”参数让引擎批量加载数据而不是动态加载数据会很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多