Получить все идентификаторы повторяющихся вершин в Gremlin - PullRequest
1 голос
/ 28 мая 2020

Проблема

Я выполняю запрос, который находит повторяющиеся вершины по свойству name. Я хотел бы знать идентификаторы для всех соответствующих вершин.

В настоящее время возвращаются только идентификаторы в предложении where.

Пример графика

Вот пример игрушечного графика. Есть две вершины с одинаковым именем ex.

==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('X').property('name', 'ex')
==>v[0]
gremlin> g.addV('Y').property('name', 'why')
==>v[2]
gremlin> g.addV('Y').property('name', 'ex')
==>v[4]
gremlin> g.V().elementMap()
==>[id:0,label:X,name:ex]
==>[id:2,label:Y,name:why]
==>[id:4,label:Y,name:ex]

Обнаружение дубликатов

Когда я нахожу дубликаты и получаю elementMap(), идентификаторы предназначены только для вершины, сопоставленной в предложение where.

gremlin> g.V().hasLabel('X').as('x').V().hasLabel('Y').as('y').where('x', P.eq('y')).by('name').elementMap()
==>[id:4,label:Y,name:ex]

В то время как я хотел бы видеть id для обоих, которые будут id:0 и id:4

, я бы хотел что-то вроде:

==>[[id:0,label:X,name:ex], [id:4,label:Y,name:ex]]

1 Ответ

2 голосов
/ 28 мая 2020

Вы действительно очень близко подошли

gremlin> g.V().hasLabel('X').as('x').
......1>   V().hasLabel('Y').as('y').
......2>   where(eq('x')).by('name').
......3>   select('x','y').
......4>     by(valueMap().by(unfold()).
                with(WithOptions.tokens)).
......5>   select(values)

==>[[id:0,label:X,name:ex],[id:4,label:Y,name:ex]]     
...