Return 某些顶点以及它们是否与特定顶点共享边

Return certain vertices and whether they share an edge with a particular vertex

我正在尝试在我的应用中模拟某些用户之间的关注者关系:

用户----关注----用户

(想想推特)

给定一组 userId,我需要 return 所有这些用户顶点和一个布尔值,如果特定用户 (currentUser) 对这些用户有 follows 优势。所以我需要知道 currentUser 是否关注了这些用户:

user1: true

user2: true

user3: false

user4: true

我不知道如何获取关注状态。如果我 return 每个用户顶点像这样:

currentUser = g.V(1); g.V().hasLabel("appUser").or(__.has("userId","123869681319429"), __.has("userId","103659593341656")).valueMap();

什么是一个有效的命令来确定每个人是否都有来自 currentUser 的传入 follows 边缘?

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())

这是一种方法。假设此示例图:

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]

您上面的代码片段表明您将拥有 "current user" 个顶点以及您想要与当前用户进行比较的用户的顶点,以查看是否存在任何后续关系。鉴于该假设,您可以这样处理:

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的值表示跟随关系,0值表示相反的没有跟随关系。因此,在上面的示例中,用户 1 关注了 2 但没有关注 3。