Search code examples
gremlinazure-cosmosdb-gremlinapi

Best way to limit edges to the same group of verices using Gremlin against Azure Cosmos db graph


I need to get vertices filtered by a specific predicate on the properties, and all the edges (with a particular label, and perhaps some predicate on the properties of an edge) existing between them.

This is for a Cosmos Azure Db graph, and the solution should be a single Gremlin query.

So far I am thinking of something along the lines of:

g.V().has('property1', value1).has('property2', value2).select('vertices')
.outE().as('edges').inV().has('property1', value1).has('property2', value2)
.select('vertices','edges')

Is there a better way to achieve this?


Solution

  • Given the description and your comment, this traversal should work for you:

    g.V().has('property1', value1).has('property2', value2).
      aggregate('v').
      outE().                   /* add edge filters here */
      inV().where(within('v')).
      path().
      union(union(limit(local, 1),
                  tail (local, 1)).dedup().aggregate('vertices'),
            range(local, 1, 2).aggregate('edges')).
      cap('vertices','edges').next()