2
votes

May be my understanding of gremlin query is wrong :). I am trying to execute a query from Java client and the query is: g.V().hasLabel('MYLABEL'). Have multiple (say 20) vertices that match the label and the ResultSet just have one Result with the data of all twenty vertices included. I would like to have the ResultSet with 20 Results. What way that I need to rearrange the query. please suggest.

  • few more details:

From Console.

[query result as run from gremlin console][1]

gremlin> client.submit("g.V().hasLabel('PERSON')")

==>result{object=v[11] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[13] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex} ==>result{object=v[15] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex}

From Java Client Query -> g.V().hasLabel('PERSON')

The result -> result{object={@type=g:List, @value=[{@type=g:Vertex, @value={id={@type=g:Int64, @value=11}, label=PERSON, properties={AGE=[{@type=g:VertexProperty, @value={id={@type=g:Int64, @value=12}, value={@type=g:Int32, @value=11}, label=AGE}}]}}}, {@type=g:Vertex, @value={id={@type=g:Int64, @value=13}, label=PERSON, properties={AGE=[{@type=g:VertexProperty, @value={id={@type=g:Int64, @value=14}, value={@type=g:Int32, @value=12}, label=AGE}}]}}}, {@type=g:Vertex, @value={id={@type=g:Int64, @value=15}, label=PERSON, properties={AGE=[{@type=g:VertexProperty, @value={id={@type=g:Int64, @value=16}, value={@type=g:Int32, @value=13}, label=AGE}}]}}}]} class=java.util.LinkedHashMap}

1

1 Answers

2
votes

Just use fold() as in - you can see my example here:

gremlin> cluster = Cluster.open()
==>localhost/127.0.0.1:8182
gremlin> client = cluster.connect()
==>org.apache.tinkerpop.gremlin.driver.Client$ClusteredClient@51efb731
gremlin> r = client.submit("g.V().hasLabel('person')").all().get()
==>result{object=v[1] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex}
==>result{object=v[2] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex}
==>result{object=v[4] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex}
==>result{object=v[6] class=org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex}
gremlin> r = client.submit("g.V().hasLabel('person').fold()").all().get()
==>result{object=[v[1], v[2], v[4], v[6]] class=java.util.ArrayList}

Note that the downside to fold() in this example is that the result won't be streamed back to the client. You will build the entire list in memory on the server and then it will serialize that list as a single payload. If that list is sufficiently large and you generate enough of such lists you may hit memory/GC issues.