порядок Гремлина с помощью coalesce дублирует некоторые значения - PullRequest
0 голосов
/ 26 ноября 2018

В некоторых случаях я получаю необъяснимый результат, когда использую order().by(...) с coalesce(...).Используя стандартный график Модерна,

gremlin> g.V()
          .hasLabel("person")
          .out("created")
          .coalesce(values("name"), constant("x"))
          .fold()
==>[lop,lop,ripple,lop]

Но если я сортирую по имени до объединения, я получу 9 lop вместо 3:

gremlin> g.V()
          .hasLabel("person")
          .out("created")
          .order().by("name")
          .coalesce(values("name"), constant("x"))
          .fold()
==>[lop,lop,lop,lop,lop,lop,lop,lop,lop,ripple]

Почему число элементов отличается междудва запроса?

1 Ответ

0 голосов
/ 26 ноября 2018

Это похоже на ошибку - я создал проблему в JIRA .Существует обходной путь, но сначала учтите, что ваш обход на самом деле не будет работать даже с установленной ошибкой, order() потерпит неудачу, потому что вы ссылаетесь на ключ, который, возможно, не существует в by() модуляторе.Так что вам нужно учитывать это по-другому:

g.V().
  hasLabel("person").
  out("created").
  order().by(coalesce(values('name'),constant('x')))

Затем я использовал choose(), чтобы сделать то, что coalesce() должен делать:

g.V().
  hasLabel("person").
  out("created").
  order().by(coalesce(values('name'),constant('x'))).
  choose(has("name"),values('name'),constant('x')).
  fold()

, и это, кажется, работает нормально.

...