Ayúdame con la consulta sobre Gremlin lang

Tengo un gráfico con 2 tipos de vértices: Usuario y Grupo. Necesito encontrar amigos de 'U1'. Si los usuarios tienen bordes (miembros o invitados) al 'Grupo A', deben marcarlos como el resultado a continuación.

[Graph image](https://ibb.co/D9VPKw4)

Resultado esperado: [{U2: 'Miembro'}, {U3: 'Invitado'}, {U4: 'Miembro'}]

1
Kaveendra Perera 3 dic. 2020 a las 19:31

2 respuestas

La mejor respuesta
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())
0
Supun Induwara 7 dic. 2020 a las 05:03

Puede comenzar desde el vértice de U1 y desde allí puede ir a todos sus amigos usando el paso out, luego filtrarlos con el paso where.

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

Ejemplo: https://gremlify.com/1o0chgjomi6/1

EDITAR

Para este tipo de resultado puedes hacer:

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

Ejemplo: https://gremlify.com/4qnd7wi1rnv

1
noam621 4 dic. 2020 a las 09:39