【问题标题】:How to add multiple edges from one vertex in a single traversal如何在一次遍历中从一个顶点添加多条边
【发布时间】:2020-12-01 05:01:19
【问题描述】:

我有三个user 顶点。汤姆和迈克follow鲍勃。

g.addV("user").property(single,"name", "bob")
g.addV("user").property(single,"name", "tom")
g.addV("user").property(single,"name", "mike")
g.V().hasLabel("user").has("name", "tom").as("tom").V().hasLabel("user").has("name", "bob").addE("follow").from("tom")
g.V().hasLabel("user").has("name", "mike").as("mike").V().hasLabel("user").has("name", "bob").addE("follow").from("mike")

我想为用户添加一个带有边缘的alert。 Bob 到 alert 应该有边,alert 对于 follow Bob 的用户应该有边。

g.V()
.hasLabel("user")
.has("name", "bob")
.as("bob")
.in("follow")
.as("followers")
.addV("alert")
.as("alert")
.addE("alert")
.from("alert")
.to("followers")
.addE("alert")
.from("bob")
.to("alert")

我最终得到的是两个alert 顶点。 Bob 对这些新的alert 顶点中的每一个都有优势,并且警报对 Tom 和 Mike(追随者)有优势。

我相信这是因为当我选择关注者时,它会分支(?)遍历并开始创建重复项,但这不是我想要的。如何构造此遍历以进行适当的选择,但只创建一个 alert 顶点?我想要得到的是:

       bob
        |
        v
      alert
     |     |
     v     v
   mike   tom

【问题讨论】:

    标签: gremlin tinkerpop amazon-neptune


    【解决方案1】:

    你是正确的,重复来自in('follow') 产生两个遍历器,因此addV('alert') 被多次调用。有很多方法可以解决这个问题,但我立即想到了以下方法:

    gremlin> g.V().
    ......1>   hasLabel("user").
    ......2>   has("name", "bob").as("b").
    ......3>   addV("alert").as('a').
    ......4>   addE("alerted").from("b").
    ......5>   select('b').
    ......6>   in("follow").
    ......7>   addE("alerted").from("a").iterate()
    gremlin> g.V()
    ==>v[0]
    ==>v[2]
    ==>v[4]
    ==>v[8]
    gremlin> g.V().elementMap()
    ==>[id:0,label:user,name:bob]
    ==>[id:2,label:user,name:tom]
    ==>[id:4,label:user,name:mike]
    ==>[id:8,label:alert]
    gremlin> g.E().elementMap()
    ==>[id:6,label:follow,IN:[id:0,label:user],OUT:[id:2,label:user]]
    ==>[id:7,label:follow,IN:[id:0,label:user],OUT:[id:4,label:user]]
    ==>[id:9,label:alerted,IN:[id:8,label:alert],OUT:[id:0,label:user]]
    ==>[id:10,label:alerted,IN:[id:2,label:user],OUT:[id:8,label:alert]]
    ==>[id:11,label:alerted,IN:[id:4,label:user],OUT:[id:8,label:alert]]
    

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2022-11-09
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多