'TinkerPop Gremlin, how get child elements filtered and grouped
I'm new to using Gremlin and I need help to set the best query to select unique and filtered results.
Starting from a team I would get player (note: each player can play for more than one team) of each team connected by is_friends_with
The result (I would like to get)
[
{
"Player": "Icardi",
"Teams": ["Valladolid"]
},
{
"Player": "Kroll",
"Teams": ["Valladolid"]
},
{
"Player": "Baggio",
"Teams": ["Eagles"]
},
{
"Player": "Papin",
"Teams": ["Valladolid","Eagls"]
},
]
The graph
The schema:
g.addV('team').as('1').
property(single, 'name', 'Eagles').
addV('player').as('2').
property(single, 'name', 'Zico').addV('team').
as('3').
property(single, 'name', 'team A').
addV('team').as('4').
property(single, 'name', 'Horses').
addV('player').as('5').
property(single, 'name', 'Papin').
addV('player').as('6').
property(single, 'name', 'Ronaldo').
addV('player').as('7').
property(single, 'name', 'Visco').
addV('player').as('8').
property(single, 'name', 'Baggio').
addV('tournament').as('9').
addV('team').as('10').
property(single, 'name', 'Valladolid').
addV('player').as('11').
property(single, 'name', 'Kroll').
addV('player').as('12').
property(single, 'name', 'Icardi').
addE('owned').from('1').to('5').addE('owned').
from('1').to('6').addE('owned').from('1').
to('8').addE('owned').from('3').to('6').
addE('owned').from('3').to('7').
addE('created').from('3').to('9').
addE('is_friends_with').from('3').to('10').
addE('is_friends_with').from('3').to('1').
addE('owned').from('4').to('8').addE('owned').
from('4').to('2').addE('owned').from('4').
to('5').addE('owned').from('4').to('7').
addE('invited').from('9').to('1').
addE('invited').from('9').to('4').
addE('owned').from('10').to('11').
addE('owned').from('10').to('12').
addE('owned').from('10').to('5')
Solution 1:[1]
gremlin> g.V().has("name", "team A").sideEffect(__.out("owned").hasLabel("player").aggregate("my_player").limit(1)).both("is_friends_with").hasLabel("team").as("team2").out("owned").hasLabel("player").as("friends_player").where(without("my_player")).as("friends_player2").select("team2", "friends_player2").group().by(select("friends_player2")).by(select("team2").fold()).unfold().project("Player", "Teams").by(select(keys).values("name")).by(select(values).unfold().values("name").fold())
==>[Player:Baggio,Teams:[Eagles]]
==>[Player:Kroll,Teams:[Valladolid]]
==>[Player:Icardi,Teams:[Valladolid]]
==>[Player:Papin,Teams:[Valladolid,Eagles]]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Stark Arya |

