代码之家  ›  专栏  ›  技术社区  ›  Srinath Ganesh

小叮当:克里姆林重访访问过的边缘

  •  1
  • Srinath Ganesh  · 技术社区  · 6 年前

    enter image description here

    查询以创建示例数据

    g.addV("Test1").property("title", "A")
    g.addV("Test2").property("title", "B")
    g.addV("Test3").property("title", "C")
    g.addV("Test4").property("title", "D")
    
    g.V().has("Test1", "title", "A").addE("rel").to(g.V().has("Test2", "title", "B"))
    g.V().has("Test2", "title", "B").addE("rel").to(g.V().has("Test3", "title", "C"))
    g.V().has("Test3", "title", "C").addE("rel").to(g.V().has("Test4", "title", "D"))
    

    查询

    1. 找到方法 A 连接到

    预期答案:未连接

    我的问题:

    g.V().has("Test1", "title", "A").as("nodes")
    .repeat(both().as("nodes"))
    .emit(hasLabel("Test1")).hasLabel("Test1")
    .limit(25)
    .project("val").by(select(all, "nodes").unfold().values("title").fold())
    

    limit 25 )

    {'val': ['A', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'D', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'C', 'D', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'C', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'C', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'A', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'B', 'A', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'C', 'D', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'C', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'C', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'A', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'D', 'C', 'D', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'D', 'C', 'B', 'C', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'D', 'C', 'B', 'A', 'B', 'A']}
    {'val': ['A', 'B', 'C', 'D', 'C', 'B', 'C', 'D', 'C', 'B', 'A']}
    

    dedup

    g.V().has("Test1", "title", "A").as("nodes")
    .repeat(both().as("nodes").dedup())
    .emit(hasLabel("Test1")).hasLabel("Test1")
    .project("val").by(select(all, "nodes").unfold().values("title").fold())
    

    结果

    {'val': ['A', 'B', 'A']}
    

    正好是一条边 之间 一个 B

    Cypher查询的行为方式似乎是

    MATCH p=((n:Test1)-[*]-(m:Test1)) RETURN p
    

    enter image description here


    Gremlin服务器版本:3.3.1

    1 回复  |  直到 6 年前
        1
  •  4
  •   Daniel Kuppitz    6 年前

    看起来你想要的只是非循环路径:

    g.V().has("Test1", "title", "A").
      repeat(both().simplePath()).
        until(hasLabel("Test1")).
      path().
        by("title")