#javascript #gremlin #graph-databases #tinkerpop
#javascript #gremlin #граф-базы данных #tinkerpop
Вопрос:
Пожалуйста, помогите мне с запросом на Gremlin lang
У меня есть график с 2 типами вершин: пользователь и группа. Мне нужно найти друзей ‘U1’. Если у пользователей есть ребра (член или приглашение) в «Группу A», необходимо пометить их, как показано ниже. Результат.
Ожидаемый результат: [ {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())