如何使用Gremlin 3删除除具有特定inVertices的边缘之外的传出边缘?

时间:2016-12-24 09:24:40

标签: gremlin

如果它们的inVertices不包含在entity列表中,我想从顶点donttouch中删除传出边。

我有这样的遍历:

g.V(id).as("entity")
 .V(id2).as("donttouch1")
 .V(id3).as("donttouch2")
 .outE("hasType").drop();

上述查询有三个问题:

  • 需要过滤要删除的边
  • 它需要以某种方式回溯到entity,因此outE("hasType")边缘来自entity而不是最后donttouch。我认为在TinkerPop 2中可以使用back('x')步骤
  • 它需要在drop()
  • 之后返回entity

所以我需要这样的东西:

String[] donttouch= {"donttouch1","donttouch1"};

g.V(id).as("entity")
 .V(id2).as("donttouch1")
 .V(id3).as("donttouch2")
 .back("entity").outE("hasType")
 .where(not(inV().hasId(P.within(donttouch)))).drop().select("entity").next()

donttouch的列表可能很长,所以我更愿意将它们全部放在一起而不是neq的结合

谢谢!

1 个答案:

答案 0 :(得分:1)

我假设列表/集中已存在不可触摸的ID列表。在这种情况下,你可以这样做:

g.withSideEffect("x", untouchableIds).
  V(id).outE("hasType").not(inV().id().where(within("x"))).drop()