如何删除两个顶点之间的边?

时间:2016-01-04 10:36:28

标签: titan gremlin tinkerpop3

我想删除两个顶点之间的边,所以我的代码在java tinkerpop3中如下

private void removeEdgeOfTwoVertices(Vertex fromV, Vertex toV,String edgeLabel,GraphTraversalSource g){
        if(g.V(toV).inE(edgeLabel).bothV().hasId(fromV.id()).hasNext()){
            List<Edge> edgeList = g.V(toV).inE(edgeLabel).toList();
            for (Edge edge:edgeList){
                if(edge.outVertex().id().equals(fromV.id())) {
                    TitanGraph().tx();
                    edge.remove();                    
                    TitanGraph().tx().commit();
                    return;//Remove edge ok, now return.
                }
            }
        }
    }

是否有更简单的方法通过直接查询到该边缘并删除它来删除两个顶点之间的边缘?谢谢你的帮助。

1 个答案:

答案 0 :(得分:13)

这是一个如何在两个顶点之间删除边的示例(其中只有这些顶点的id:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).bothE()
==>e[9][1-created->3]
==>e[7][1-knows->2]
==>e[8][1-knows->4]

出于示例的目的,假设我们想要在顶点1和顶点2之间删除边缘。我们可以找到那些:

gremlin> g.V(1).bothE().where(otherV().hasId(2))
==>e[7][1-knows->2]

然后将其删除:

gremlin> g.V(1).bothE().where(otherV().hasId(2)).drop()
gremlin> g.V(1).bothE()
==>e[9][1-created->3]
==>e[8][1-knows->4]

如果您有实际的顶点,那么您可以这样做:

gremlin> g.V(v1).bothE().where(otherV().is(v2)).drop()
gremlin> g.V(1).bothE()
==>e[9][1-created->3]
==>e[8][1-knows->4]

您可以将您的功能重写为:

private void removeEdgeOfTwoVertices(Vertex fromV, Vertex toV,String edgeLabel,GraphTraversalSource g){
    g.V(fromV).bothE().hasLabel(edgeLabel).where(__.otherV().is(toV)).drop().iterate();
    g.tx().commit();    
}