首页 文章

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

提问于
浏览
1

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

用户---- ----如下用户

(想想推特)

给定一组userIds我需要返回所有这些用户顶点,如果特定用户( currentUser )具有这些用户的边缘,则需要返回布尔值 . 所以我需要知道 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();

什么是一个有效的命令来确定每个人是否有来自 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())

1 回答

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

相关问题