【问题标题】:How do I traverse the graph given a start point and without knowledge of the final one?如何在给定起点且不知道最终点的情况下遍历图形?
【发布时间】:2013-12-19 15:40:50
【问题描述】:

假设我有一个图,它看起来像一棵可变数量的树。我有Vertex,除了id0 之外,我对最后一点的下落一无所知。我看过一些 Gremlin 用法的例子,但找不到合适的例子——它们基本上都在做类似x.out.in.out 之类的事情,这对我来说是不适用的。我也使用 Java 绑定,因此如果您能就这一事实作出答复,我将不胜感激。

附:也许我应该更具体一些。我还想收集该节点的所有properties,所以如果有某种reduce/foldLeft 等,但仅限于pipes - 那太好了。

【问题讨论】:

    标签: gremlin orientdb tinkerpop


    【解决方案1】:

    Tinkerpop Toy Graph 的示例(查找从 vadas [顶点 2] 到 peter [顶点 6] 的路径):

    gremlin> g = TinkerGraphFactory.createTinkerGraph()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> start = g.v(2)
    ==>v[2]
    gremlin> end = g.v(6)
    ==>v[6]
    gremlin> start.as("x").both().loop("x", {it.object != end}, {true}).retain([end]).path()[0]
    ==>[v[2], v[1], v[3], v[6]]
    

    查询不是最优的,如果您不限制结果数量,它将永远运行,但它应该回答您的问题。

    如果你想要所有属性:

    gremlin> start.as("x").both().loop("x", {it.object != end}, {true}).retain([end]).path().transform({ it.collect({ it.map() }) })[0]
    ==>[{age=27, name=vadas}, {age=29, name=marko}, {name=lop, lang=java}, {age=35, name=peter}]
    

    如果你只需要一个属性:

    gremlin> start.as("x").both().loop("x", {it.object != end}, {true}).retain([end]).path().transform({ it.collect({ it.name }) })[0]
    ==>[vadas, marko, lop, peter]
    

    干杯, 丹尼尔

    【讨论】:

    猜你喜欢
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多