Gremlin groupcount by edges 然后 select 除了计数本身之外的其他属性

Gremlin groupcount by edges and then also select other properties besides the count itself

我正在为用户关注其他人的社交网络建模。我正在尝试生成一个潜在用户列表,以供那些也被我关注的人关注的人关注并对其进行排序(由于缺少更好的术语,我们称这些为 'mutualFollowers')。

我当前的查询通过获取“myusername”关注的用户关注的所有用户(来自 userOne --> userTwo 的“关注”边缘)并删除用户“myusername”已经关注的用户(the此处聚合组“关注”)。

g.V().has("user", "username", "myusername").out("follows").aggregate("following").out("follows").where(without("following")).groupCount().by("username").order(local).by(values, decr).next()

我可以正确生成此列表,但我只能获得包含

等条目的列表

username: 5(其中username为用户名,5为共同关注人数)

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

{username: username, name: personName, mutualFollowers: 10}

有没有简单的方法来做到这一点?

(使用 AWS Neptune)

无需过多更改,您只需 project() 一个 Map 作为 groupCount():

中的键
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)

虽然这并不能完全满足您的要求,但我想展示一种需要对原始查询进行最少更改的方法。如果您想在地图中使用实际的 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))