0

I have a scenario where I have to check multiple vertices with different labels and match their properties under a parent vertex. And then return the parent vertex if everything matches fine.

I tried writing queries with 'and' clause and 'where' clause but none is working:

Here are my trials:

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().inV().aggregate('x').hasLabel('schedule').has('name', '3').as('b').select('x').hasLabel('states').has('name', 'federal').as('c').select('a')

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().where(inV().hasLabel('schedule').has('name', '3')).where(inV().hasLabel('states').has('name', 'federal')).select('a')

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().and(inV().hasLabel('schedule').has('name', '3'),inV().hasLabel('states').has('name', 'federal')).select('a')

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().inV().aggregate('x').hasLabel('schedule').has('name', '3').as('b').select('x').unfold().hasLabel('states').has('name', 'federal').as('c').select('a')

Please guide me through the right path

Nick Chapsas
  • 6,872
  • 1
  • 20
  • 29
Varun Tahin
  • 299
  • 1
  • 2
  • 15

1 Answers1

0

You can definitely simplify your approach. I don't think you need the step labels and select() for what you are doing which is good, because they add cost to your traversal. I tried to re-write the first traversal you supplied and I"m hoping I have the logic right, but regardless, I'm thinking you will get the idea for what you need to do when you see the change:

g.V().hasLabel('schedule').in().hasLabel('url').
  where(and(out().hasLabel('schedule').has('name', '3'),
            out().hasLabel('states').has('name', 'federal')))

You already have the "parent" that you want to return on the first line, so just do a filter with where() and add your filtering logic there to traverse away from each of those "parents".

stephen mallette
  • 45,298
  • 5
  • 67
  • 135