Gremlin groupcount by edges,然后还选择计数本身之外的其他属性
我正在为一个用户追随他人的社交网络建模。我正在尝试生成一个潜在用户列表,并由那些我所关注的人(因为没有更好的术语,我们称这些人为“相互关注者”)对其进行排序 我当前的查询是通过获取“myusername”后面跟随的用户的所有用户(userOne-->userTwo中的边“following”)并删除用户“myusername”已经跟随的用户(此处的聚合组“following”) 我可以正确地生成这个列表,但是我只能得到一个包含如下条目的列表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
username:5
(其中username是用户名,5是共同关注者的数量)
我还希望能够选择每个用户顶点的其他属性,如“name”、“profile_pic”等,其形式类似于
{username: username, name: personName, mutualFollowers: 10}
有没有一个简单的方法可以做到这一点
(使用AWS Neptune)在不做太多更改的情况下,您可以将
project()
aMap
作为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))