Gremlin 如何在一次遍历中从一个顶点添加多条边

Gremlin 如何在一次遍历中从一个顶点添加多条边,gremlin,tinkerpop,amazon-neptune,Gremlin,Tinkerpop,Amazon Neptune,我有三个user顶点。汤姆和迈克跟着鲍勃 g.addV(“用户”).property(单个,“名称”、“bob”) g、 addV(“用户”)。属性(单个,“名称”、“tom”) g、 addV(“用户”)。属性(单个,“名称”、“迈克”) g、 V().hasLabel(“用户”).has(“名称”、“汤姆”).as(“汤姆”).V().hasLabel(“用户”)has(“名称”、“鲍勃”).addE(“跟随”)from(“汤姆”) g、 V().hasLabel(“用户”).has(“姓名

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

g.addV(“用户”).property(单个,“名称”、“bob”)
g、 addV(“用户”)。属性(单个,“名称”、“tom”)
g、 addV(“用户”)。属性(单个,“名称”、“迈克”)
g、 V().hasLabel(“用户”).has(“名称”、“汤姆”).as(“汤姆”).V().hasLabel(“用户”)has(“名称”、“鲍勃”).addE(“跟随”)from(“汤姆”)
g、 V().hasLabel(“用户”).has(“姓名”、“迈克”).as(“迈克”).V().hasLabel(“用户”)has(“姓名”、“鲍勃”).addE(“跟随”)from(“迈克”)
我想给用户添加一个带有边缘的
警报
。从Bob到
警报
应该有一个边缘,而
警报
应该有边缘到跟随Bob的
用户

g.V()
.hasLabel(“用户”)
.有(“姓名”、“鲍勃”)
.as(“鲍勃”)
.in.(“跟随”)
.作为(“追随者”)
.addV(“警报”)
.as(“警报”)
.addE(“警报”)
.来自(“警报”)
.致(“追随者”)
.addE(“警报”)
.来自(“鲍勃”)
.至(“警报”)
我最后得到的是两个
警报
顶点。Bob对这些新的
警报
顶点都有优势,而警报对Tom和Mike(追随者)都有优势

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

       bob
        |
        v
      alert
     |     |
     v     v
   mike   tom

正确的是,重复项来自于这样一个事实,即
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]]

正确的是,重复项来自于这样一个事实,即
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]]