Выберите между 2 доступными ребрами во время обхода - PullRequest
0 голосов
/ 28 мая 2018

Я относительно новичок в Gremlin, и компания, с которой я работаю, ищет реализацию графовой базы данных с некоторыми временными ребрами.Каждая вершина может иметь 1 или более ребер, и у каждого ребра будет свойство, которое по сути является isTeorary true / false.

При обходе графа, если «isTeorary» = true, мы должны следовать этому ребру, в противном случаемы должны следовать по краю, где "isTever" = false.

Т.е.

A-[isTemporary:true, value 1] -> B

A-[isTemporary:false, value 2] -> C

B-[isTemporary: false, value 3] -> D

Выполнение одного запроса gremlin в этом случае должно возвращать A-> B-> D.

Я просмотрел документацию по TinkerPop3, и мне кажется, что здесь я хочу использовать "выбор", который я хочу использовать, но все примеры, кажется, возвращают значение, когда я хочу вернуться назад, чтобы я мог неоднократно воздействовать на обход.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 мая 2018

Возможно, вы ищете шаг coalesce.

С учетом этого графика:

g.addV().as('a').property('name', 'A').
  addV().as('b').property('name', 'B').
  addV().as('c').property('name', 'C').
  addV().as('d').property('name', 'D').
  addE('someLink').from('a').to('b').
    property('isTemporary', true).property('value', 1).
  addE('someLink').from('a').to('c').
    property('isTemporary', false).property('value', 2).
  addE('someLink').from('b').to('d').
    property('isTemporary', false).property('value', 3)

Следующий запрос вернет все пути от A до Dпытаясь пройти через isTemporary: true ребра, если он есть, или через isTemporary: false ребра в противном случае (шаг объединения), итеративно.

g.V().has('name', 'A').
  repeat(
    coalesce(
      outE().has('isTemporary', true).inV(),
      outE().has('isTemporary', false).inV()
    )
  ).
  until(has('name', 'D')).
  path().by('name')

Результат:

==>[A,B,D]
...