【问题标题】:Arango db generate breadcrumbs while traversing graphArangodb 在遍历图时生成面包屑
【发布时间】:2013-11-30 16:42:19
【问题描述】:

我搜索了整个 arangodb 项目网站,但没有找到解决方案。如果我遍历像大洲/国家/首都这样的简单树状图,我怎样才能获得当前项目的面包屑?希望这是有道理的

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    我将从使用 arangosh 和 Gremlin.JS 的示例开始。稍后我将在所有语言驱动程序中使用 AQL。

    arangosh [_system]> var Graph = require("org/arangodb/graph").Graph;
    

    首先是不同的地点(地区、城市):

    arangosh [_system]> v1 = g.addVertex("Earth");
    arangosh [_system]> v2 = g.addVertex("Europe");
    arangosh [_system]> v3 = g.addVertex("Germany");
    arangosh [_system]> v4 = g.addVertex("Berlin");
    arangosh [_system]> v5 = g.addVertex("Spain");
    arangosh [_system]> v6 = g.addVertex("Barcelona");
    

    及其关系:

    arangosh [_system]> g.addEdge(v1, v2);
    arangosh [_system]> g.addEdge(v2, v3);
    arangosh [_system]> g.addEdge(v3, v4);
    arangosh [_system]> g.addEdge(v2, v5);
    arangosh [_system]> g.addEdge(v5, v6);
    

    所以图表现在就是你的树:

    arangosh [_system]> v1.outbound().getInVertex()
    [ Vertex("Europe") ]
    
    arangosh [_system]> v1.outbound().getInVertex().outbound().getInVertex()
    [  [  Vertex("Germany"),  Vertex("Spain") ] ]
    
    arangosh [_system]> v1.outbound().getInVertex().outbound().getInVertex().outbound().getInVertex()
    [  [  [  Vertex("Berlin")  ],  [  Vertex("Barcelona")  ]  ]  ]
    

    为了从柏林获取面包屑,您可以计算从柏林到地球的路径:

    arangosh [_system]> v4.pathTo(v1);
    [
      [
        "Berlin",
        "Germany",
        "Europe",
        "Earth"
      ]
    ]
    

    使用 AQL,您可以使用遍历从柏林遍历回到根:

    arangosh [_system]> db._query('FOR p in TRAVERSAL(locations, part, @start, "inbound", {}) RETURN p.vertex._key', { start: v4._id } ).toArray()
    [
      "Berlin",
      "Germany",
      "Europe",
      "Earth"
    ]
    

    我希望这个示例能让您了解如何创建面包屑。

    干杯 弗兰克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多