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