Как сгруппировать вершины по содержимому списка свойств - PullRequest
0 голосов
/ 04 июня 2019

В моем графе есть вершины, которые содержат свойство с количеством элементов списка.Я хотел бы сгруппировать эти вершины по содержимому списка.

В этом примере графика:

graph = TinkerGraph.open()
g = graph.traversal()
g.addV().
  property('name', 'v1').
  property(list, 'label', 'A').
  property(list, 'label', 'B')
g.addV().
  property('name', 'v2').
  property(list, 'label', 'B').
  property(list, 'label', 'C')

Я пробовал этот запрос

g.V().group().by(properties('label')).by('name').unfold()
==>vp[label->A]=[v1]
==>vp[label->B]=[v2]

но это то, что я ожидаю: A=[v1],B=[v1,v2],C=[v2]

1 Ответ

1 голос
/ 04 июня 2019

Может быть более хороший способ сделать это, но вот вариант:

gremlin> g.V().as('a').properties('label').
......1>   group().
......2>     by(value()).
......3>     by(select('a').by('name').fold()).
......4>   unfold()
==>A=[v1]
==>B=[v1, v2]
==>C=[v2]

Я думаю, что вам нужно перебрать все properties() в group(), но проблема в том, чтонет способа связать родительскую вершину с этим свойством через Gremlin.С лямбдой это выглядит немного лучше:

gremlin> g.V().properties('label').group().by(value()).by({it.element().value('name')}).unfold()
==>A=[v1]
==>B=[v1, v2]
==>C=[v2]

, но TinkerPop не рекомендует такой подход, так как он уменьшает переносимость вашего кода.

...