【问题标题】:How to loop over verticies in Gremlin and adding edge如何在 Gremlin 中循环顶点并添加边
【发布时间】:2015-02-07 03:03:54
【问题描述】:

我试图弄清楚如何在容器内循环顶点并在循环中的当前顶点和给定顶点之间添加边。

这是我目前所拥有的: 这给了我一个给定容器内所有顶点 id 的数组:

v=g.V('containerName','MyContainer').outE.inV.id

结果:

{"results":[12,320004,280004,240004,200004,160004,120004,80004,40004],"success":true,"version":"2.4.0","queryTime":35.089565} 

现在我想循环/迭代这个数组中的所有 id,获取 id 的顶点并在给定顶点和循环中的当前顶点之间添加一条边。

有谁知道如何做到这一点?

【问题讨论】:

    标签: titan gremlin rexster


    【解决方案1】:

    您可以创建一个 sideEffect 来添加新边。

    与玩具修补匠graph:

    g = TinkerGraphFactory.createTinkerGraph()
    

    假设您想将 peter 链接到 marko 的所有邻居(仅限 out)

    givenVertex = g.V('name','peter').next()
    g.V('name','marko').out.sideEffect{g.addEdge(givenVertex,it, 'yourLabel')}
    

    验证结果:

    g.V('name','peter').out.name
    ==>lop // lop appears twice because edge peter -> lop was present previous to operation
    ==>lop
    ==>vadas
    ==>josh
    

    【讨论】:

    • 嗨,我尝试按照您的建议进行操作,但是当我查看 gV('containerName','Acontainer').out.containerName 的结果时,我得到了 {"results":[ null,..,null],"success":true,"version":"2.4.0","queryTime":33.366562}
    • 似乎边缘已经创建,我可以通过执行 g.V('contaninerName','Acontainer').outE 来验证结果
    • 嗯,可能是 rexster 的问题。我只用 TinkerGraph 尝试了我的解决方案。不过,您在问题中展示了如何获取顶点的 id。我想你可以遍历 id,再次获取顶点,然后应用 sideEffect。 g.V('containerName','MyContainer').outE.inV.id 应该是可迭代的。也许试试g.V('containerName','MyContainer').outE.inV.id.sieEffect{g.addEdge(g.v(<givenVertexId>).next(), g.v(it).next(), 'yourLabel')}
    • 啊好吧……只是想问你这个;)
    • 请注意,Gremlin shell 会自动迭代您的所有语句。在 Rexster 中,您必须明确地迭代:g.V('name','marko').out().sideEffect{givenVertex.addEdge('yourLabel', it)}.iterate()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2021-09-08
    相关资源
    最近更新 更多