我正在尝试为我的应用中的某些用户建立关注关系:
用户---- ----如下用户
(想想推特)
给定一组userIds,如果特定用户(currentUser
)对这些用户有follows
边缘,我需要返回所有这些用户顶点和布尔值。所以我需要知道currentUser
是否跟随这些用户:
user1:true
user2:true
user3:false
user4:true
我坚持如何获取该关注状态。如果我像这样返回每个用户顶点:
currentUser = g.V(1);
g.V().hasLabel("appUser").or(__.has("userId","123869681319429"),
__.has("userId","103659593341656")).valueMap();
什么是有效的命令来确定每个人是否有来自follows
的传入currentUser
边缘?
在DynamoDB上运行的TitanDB 1.0.0。
编辑 - 添加我的完整工作遍历:
g.V().hasLabel('appUser').or(__.has('cId', '1232'),__.has('cId', '1116')).group().by().by(__.in('follows').hasId(hasLabel('appUser').has('pId', 'd13dfa6').id()).count())
编辑2 -
我最后重写了这次遍历,以便使用as()
和select()
更好地捕获我需要的数据。离开这里参考:
g.V().hasLabel('appUser').or(__.has('cId', '1232'),__.has('cId', '1116')).as('user','followCount').select('user','followCount').by(__.valueMap()).by(__.in('follows').hasId(hasLabel('appUser').has('pId', 'd13dfa6').id()).count())
答案 0 :(得分:3)
这是一种方法。假设此示例图表:
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> vUser1 = graph.addVertex(id,1)
==>v[1]
gremlin> vUser2 = graph.addVertex(id,2)
==>v[2]
gremlin> vUser3 = graph.addVertex(id,3)
==>v[3]
gremlin> vUser1.addEdge('follows',vUser2)
==>e[0][1-follows->2]
gremlin> vUser3.addEdge('follows',vUser3)
==>e[1][3-follows->3]
上面的代码片段演示了您将拥有“当前用户”顶点以及要与当前用户进行比较的用户的顶点,以查看是否存在任何后续关系。鉴于这种假设,你可以这样做:
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:3 edges:2], standard]
gremlin> g.V(vUser2,vUser3).group().by().by(__.in("follows").hasId(vUser1.id()).count())
==>[v[2]:1, v[3]:0]
在这种情况下,您迭代要比较的用户顶点列表,然后对它们进行分组。遍历将输出Map
,其中大于0
的值表示跟随关系,值零表示没有跟随关系的相反。因此,在上面的示例中,用户1遵循2但不遵循3.