Search code examples
groovygraphtitantinkerpop3

How to extract raw values for comparison or manipulation from Gremlin (Tinkerpop)


I know I'm missing something obvious here. I'm trying to extract values from TitanDB using Gremlin in order to compare them within Groovy.

graph = TinkerFactory.createModern()
g = graph.traversal(standard())
markoCount = g.V().has('name','marko').outE('knows').count()
lopCount = g.V().has('name','lop').outE('knows').count()
if(markoCount > lopCount){
// Do something
}

But apparently what I'm actually (incorrectly) doing here is comparing traversal steps which obviously won't work:

Cannot compare org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal with value '[TinkerGraphStep(vertex,[name.eq(marko)]), VertexStep(OUT,[knows],edge), CountGlobalStep]' and org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal with value '[TinkerGraphStep(vertex,[name.eq(lop)]), VertexStep(OUT,[knows],edge), CountGlobalStep]'

I'm having the same issue extracting values from properties for use in Groovy as well. I didn't see anything in the docs indicating how to set raw values like this.

What is needed to return actual values from Gremlin that I can use later in my Groovy code?


Solution

  • Figured it out, I needed next():

    graph = TinkerFactory.createModern()
    g = graph.traversal(standard())
    markoCount = g.V().has('name','marko').outE('knows').count().next()
    lopCount = g.V().has('name','lop').outE('knows').count().next()
    if(markoCount > lopCount){
    // Do something
    }