Список вершин, которые могут быть достигнуты указанным списком вершин - PullRequest
0 голосов
/ 26 октября 2018

Вот как выглядит мой график.

g = TinkerGraph.open().traversal()
school1 = g.addV('school').property('id', '1').next()
school2 = g.addV('school').property('id', '2').next()
student1 = g.addV('student').property('id', '3').next() 
student2 = g.addV('student').property('id', '4').next()     
g.addE('students').from(school1).to(student1)
g.addE('students').from(school1).to(student2)
g.addE('students').from(school2).to(student1)

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

Ответы [ 2 ]

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

Это может работать

gremlin> schools = [ '1', '2' ]
==>1
==>2
gremlin> g.V().
......1>   has('school', 'id', within(schools)).
......2>   out('students').
......3>   groupCount().by('id').
......4>   unfold().
......5>   filter( select(values).is(eq(schools.size())) ).
......6>   select(keys)
==>3
  • Начните со списка школ.Вероятно, можно с уверенностью предположить, что школ будет меньше, чем учеников.
  • Пройдите out() от школ к ученикам.В этот момент учащиеся появляются в потоке несколько раз, по одному разу для каждой школы, которую они посещали.Я предполагаю, что между конкретной школой и конкретным учеником будет только 1 грань.
  • Сделайте groupCount(), чтобы создать Карту, где для каждой записи key - это идентификатор ученика иvalue - количество школ для учащегося.
  • Используйте unfold() для работы с записями на карте.
  • filter выбирает только учеников, подключенных ко всей школе всписки, т. е. число value учащегося равно числу школ в списке.
  • Наконец select(keys) для возврата идентификатора учащегося в качестве результата.
0 голосов
/ 26 октября 2018
gremlin> g.V(school1).out('students').filter(__.in('students').is(school2)).valueMap(true)
==>[id:4,label:student,id:[3]]

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

...