Search code examples
gremlintinkerpop3janusgraph

How can I use until in janusgraph?


gremlin> a = graph.addVertex("name", "alice")
gremlin> b = graph.addVertex("name", "bobby")
gremlin> c = graph.addVertex("name", "cindy")
gremlin> d = graph.addVertex("name", "david")
gremlin> e = graph.addVertex("name", "eliza")
gremlin> a.addEdge("rates",b,"tag","ruby","value",9)
gremlin> b.addEdge("rates",c,"tag","ruby","value",8)
gremlin> c.addEdge("rates",d,"tag","ruby","value",7)
gremlin> d.addEdge("rates",e,"tag","ruby","value",6)
gremlin> e.addEdge("rates",a,"tag","java","value",9)

g.V().has('name', 'alice').repeat(out()).times(6).cyclicPath().path().by('name')

I want to end with alice node. and I want to repeat all the step not want to specify time as 6. The requirement is I want to get all the loop from alice or get all the loops from the graph.


Solution

  • You can refer to the Cycle Detection section in the TinkerPop Recipes - it adapts fairly easily to your sample graph:

    gremlin> g.V().has('name', 'alice').as('a').
    ......1>   repeat(out().simplePath()).
    ......2>     emit(loops().is(gt(1))).
    ......3>   both().where(eq('a')).
    ......4>   path().
    ......5>     by('name').
    ......6>   dedup().
    ......7>     by(unfold().order().dedup().fold())
    ==>[alice,bobby,cindy,david,eliza,alice]