Gremlin groupcount by edges,然后还选择计数本身之外的其他属性

Gremlin groupcount by edges,然后还选择计数本身之外的其他属性,gremlin,tinkerpop,tinkerpop3,gremlin-server,amazon-neptune,Gremlin,Tinkerpop,Tinkerpop3,Gremlin Server,Amazon Neptune,我正在为一个用户追随他人的社交网络建模。我正在尝试生成一个潜在用户列表,并由那些我所关注的人(因为没有更好的术语,我们称这些人为“相互关注者”)对其进行排序 我当前的查询是通过获取“myusername”后面跟随的用户的所有用户(userOne-->userTwo中的边“following”)并删除用户“myusername”已经跟随的用户(此处的聚合组“following”) 我可以正确地生成这个列表,但是我只能得到一个包含如下条目的列表 username:5(其中username是用户名,5

我正在为一个用户追随他人的社交网络建模。我正在尝试生成一个潜在用户列表,并由那些我所关注的人(因为没有更好的术语,我们称这些人为“相互关注者”)对其进行排序

我当前的查询是通过获取“myusername”后面跟随的用户的所有用户(userOne-->userTwo中的边“following”)并删除用户“myusername”已经跟随的用户(此处的聚合组“following”)

我可以正确地生成这个列表,但是我只能得到一个包含如下条目的列表

username:5
(其中username是用户名,5是共同关注者的数量)

我还希望能够选择每个用户顶点的其他属性,如“name”、“profile_pic”等,其形式类似于

{username: username, name: personName, mutualFollowers: 10}
有没有一个简单的方法可以做到这一点


(使用AWS Neptune)

在不做太多更改的情况下,您可以将
project()
a
Map
作为
groupCount()
中的键:

虽然这并不能完全满足您所要求的表单,但我想演示一种对原始查询进行最少更改的方法。如果您想在地图中输入一个实际的
mutualFollowers
键,则必须解构
map
并将其展平:

g.V().
  has("user", "username", "myusername").
  out("follows").
  aggregate("following").
  out("follows").
  where(without("following")).
  groupCount().
  order(local).by(values, decr).
  unfold().
  project('username','name','mutualFollowers').
    by(select('keys').values('username')).
    by(select('keys').values('name')).
    by(select(values))

谢谢也感谢你给出这两个解,真的让这个概念更清晰了
g.V().
  has("user", "username", "myusername").
  out("follows").
  aggregate("following").
  out("follows").
  where(without("following")).
  groupCount().
    by(project('username','name').
         by('username').by('name')).
  order(local).by(values, decr)
g.V().
  has("user", "username", "myusername").
  out("follows").
  aggregate("following").
  out("follows").
  where(without("following")).
  groupCount().
  order(local).by(values, decr).
  unfold().
  project('username','name','mutualFollowers').
    by(select('keys').values('username')).
    by(select('keys').values('name')).
    by(select(values))