TinkerPop Gremlin,如何过滤和分组子元素

TinkerPop Gremlin, how get child elements filtered and grouped

我是 Gremlin 的新手,我需要帮助来将最佳查询设置为 select 独特且经过过滤的结果。

team开始,我会得到player注意:每个玩家可以为多个球队效力)每个teamis_friends_with

连接

结果(我想得到)

[
 {
   "Player": "Icardi",
   "Teams": ["Valladolid"]
 },
 {
   "Player": "Kroll",
   "Teams": ["Valladolid"]
 },

  {
   "Player": "Baggio",
   "Teams": ["Eagles"]
 },

 {
   "Player": "Papin",
   "Teams": ["Valladolid","Eagls"]
 },
]

图表

架构:

 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')

这是使用 group

的一种方法
gremlin>  g.V().
......1>    has('name','team A').
......2>    out('is_friends_with').as('a').
......3>    out('owned').
......4>    group().
......5>      by('name').
......6>      by(select('a').values('name').fold()).
......7>    unfold()

==>Papin=[Valladolid, Eagles]
==>Icardi=[Valladolid]
==>Baggio=[Eagles]
==>Ronaldo=[Eagles]
==>Kroll=[Valladolid]  

要获得与您的 JSON 匹配的确切格式,我们只需在查询中添加一个 project 步骤。

gremlin>  g.V().
......1>    has('name','team A').
......2>    out('is_friends_with').as('a').
......3>    out('owned').
......4>    group().
......5>      by('name').
......6>      by(select('a').values('name').fold()).
......7>    unfold().
......8>    project('player','teams').
......9>      by(keys).
.....10>      by(values)

==>[player:Papin,teams:[Valladolid,Eagles]]
==>[player:Icardi,teams:[Valladolid]]
==>[player:Baggio,teams:[Eagles]]
==>[player:Ronaldo,teams:[Eagles]]
==>[player:Kroll,teams:[Valladolid]] 

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("球员").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().值(“名称”).fold())

==>[Player:Baggio,Teams:[Eagles]]
==>[Player:Kroll,Teams:[Valladolid]]
==>[Player:Icardi,Teams:[Valladolid]]
==>[Player:Papin,Teams:[Valladolid,Eagles]]