Запрос графиков с помощью Gremlin

#javascript #gremlin #graph-databases #tinkerpop

#javascript #gremlin #граф-базы данных #tinkerpop

Вопрос:

Пожалуйста, помогите мне с запросом на Gremlin lang

У меня есть график с 2 типами вершин: пользователь и группа. Мне нужно найти друзей ‘U1’. Если у пользователей есть ребра (член или приглашение) в «Группу A», необходимо пометить их, как показано ниже. Результат.

[Изображение графика] (https://ibb.co/D9VPKw4 )

Ожидаемый результат: [ {U2: ‘Участник’}, {U3: ‘Приглашенный’ }, {U4: ‘Участник’} ]

Ответ №1:

Вы можете начать с вершины U1 и оттуда перейти ко всем его друзьям, используя out step, а затем отфильтровать их с where помощью step.

 g.V().hasLabel('U1').out('Friend').
  where(out('Member', 'Invited').
    hasLabel('Group A'))
 

пример: https://gremlify.com/1o0chgjomi6/1

Редактировать

для такого результата вы можете сделать:

 g.V().hasLabel('U1').out('Friend').
    as('friend').
  outE('Member', 'Invited').where(inV().
    hasLabel('Group A')).
  group().
    by(select('friend').label()).
    by(label())
 

пример: https://gremlify.com/4qnd7wi1rnv

Комментарии:

1. Изображение Могу ли я получить всех друзей таким образом. возможно ли это? { «U2»: «Участник», «U3»: «Приглашенный», «U4»: «» }

Ответ №2:

 g.V().has('User', 'name', 'U1')
  .out('friend')
  .as('friends')
  .bothE('invited', 'member', 'friend')
  .where(or(inV().has('Group', 'name', 'G1'), outV().has('User', 'name', 'U1')))
  .group()
  .by(select('friends').values('name'))
  .by(label().fold())