2

select("anything").count() always returns 1 when called inside choose()

Why this happens? Is there any elegant and not slow to execute workaround for this problem? With "elegant and not slow" I mean a solution where I don't have to write the search 2 times because I cannot use select() to go back.

You can test by yourself this on the gremlin console with these lines:

g.addV("test1")
g.addV("test2")
g.addV("test3")

count works because not using select:

g.V().as("result").choose(V().count().is(gt(1)), constant("greater than 1"), constant("not greater than 1"))

count not working because the elements being counted comes from select:

g.V().as("result").choose(select("result").count().is(gt(1)), constant("greater than 1"), constant("not greater than 1"))
fermmm
  • 1,078
  • 1
  • 9
  • 17

1 Answers1

0

The select step is used to return to a point in your traversal. since each vertex as its own traversal, you will always select only 1 vertex.

you should fold the "result" values and then count them.

g.V().fold().as('result')
  choose(
    select('result').
    count(local).is(gt(1)),
    constant('greater than 1'),
    constant('not greater than 1')
  )

example: https://gremlify.com/i0z0zqucgz

noam621
  • 2,766
  • 1
  • 16
  • 26