【问题标题】:ArangoDB : how to do a shortest_path filtering on edgesArangoDB:如何对边缘进行最短路径过滤
【发布时间】:2016-09-01 15:53:28
【问题描述】:

我正在使用 ArangoDB 3.0,我想创建一个 AQL 查询来获取从 A 到 B 的最短路径,深度 = 3,过滤某些边缘属性。

查询的“ArangoDB 2.0”版本如下:

FOR e IN GRAPH_SHORTEST_PATH('CityGraph', 'city/rome', 'city/turin',
  { 
    edgeExamples: [{filterProperty: 'FIRST'}, {filterProperty: 'SECOND' }]} 
  )

我阅读了有关 arangoDB 3.0 (https://docs.arangodb.com/3.0/AQL/Graphs/ShortestPath.html) 的文档,上面写着:

条件最短路径

SHORTEST_PATH 计算只会找到无条件的最短路径 小路。使用此构造,无法定义条件 比如:“找到所有边都是 X 类型的最短路径”。 如果你 想要做到这一点,使用普通的遍历而不是选项 {bfs: true} 与 LIMIT 1 结合使用

那么,谁能告诉我我可以执行哪种类型的 AQL 查询? 根据建议,我这样写:

FOR n, e IN 1..3 ANY 'city/rome' GRAPH 'CityGraph' OPTIONS {bfs: 真的} FILTER e.filterProperty IN ['FIRST', 'SECOND'] 限制 1 返回 {n, e}

但是它只返回第一级图的深度,而不是n的深度。

提前谢谢你。

最好的问候,

丹尼尔

【问题讨论】:

    标签: graph arangodb aql


    【解决方案1】:

    使用LIMIT 1,您指定将 AQL 的结果集限制为仅获得最短路径。

    上述查询的翻译应如下所示:

    FOR n, e, p IN 1..3 ANY 'city/rome'
        GRAPH 'CityGraph'
        OPTIONS {bfs: true}
        FILTER p.edges[*].filterProperty ALL IN ['FIRST', 'SECOND']
        FILTER n._key == 'turin'
        LIMIT 1
      RETURN {n, e}
    
    • 您过滤所有边以使其 filterProperty 为 FIRSTSECOND,如果通过了没有这两者之一的边,则丢弃此路径。
    • 最短路径的结束节点是turin

    【讨论】:

    • 我看到了LIMIT 1,但它写在文档中。相反,我想知道 startNode - endNode 之间的路径,就像我处理旧的 GRAPH_SHORTEST_PATH 一样。
    • 嗨@DanieleBortoluzzi,我已经修改了答案的内容以实际匹配您的问题。很抱歉造成混乱。
    • 有人知道您是否可以将此构造与 AQL 最短路径中的“权重”参数一起使用?
    • 不,将最短路径权重参数与 LIMIT 相结合目前没有任何用处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多