【问题标题】:Gremlin remove all VertexGremlin 移除所有顶点
【发布时间】:2012-10-10 07:37:36
【问题描述】:

我知道如何通过 id 删除一个顶点,但我需要删除多个顶点(清理数据库)。

删除1v是这样的:

ver = g.v(1)
g.removeVertex(ver)

【问题讨论】:

    标签: graph neo4j gremlin


    【解决方案1】:

    从 Gremlin 2.3.0 开始,删除所有顶点的最佳方法是:

    g.V.remove()
    

    更新:对于 Gremlin 3.x 版本,您将使用 drop()

    gremlin> graph = TinkerFactory.createModern()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
    gremlin> g.V().drop().iterate()
    gremlin> graph
    ==>tinkergraph[vertices:0 edges:0]
    

    请注意,drop() 不会像 remove() 那样自动迭代 Traversal,因此您必须显式调用 iterate() 才能进行删除。 Gremlin 控制台中的迭代在此tutorial 中有详细讨论。

    此外,请考虑不同的图形系统可能会有自己的方法,以便更快、更有效地删除该系统中的所有数据。例如,JanusGraph 有这种方法:

     JanusGraphFactory.drop(graph)
    

    其中“graph”是您要清除的JanusGraph 实例。

    【讨论】:

    【解决方案2】:

    如果您使用的是 Tinkerpop3 (Titan 1.0.0),如前所述,命令为:

    g.V().drop()
    

    为什么这对我不起作用

    这仅在您使用 Gremlin 交互式 REPL 界面时才有效。为什么? drop 返回一个必须遍历才能应用的迭代器并且 Gremlin REPL 接口会自动迭代返回的迭代器。

    我是如何解决的

    如果(像我一样)您使用 HTTP 或 WebSocket 接口连接 Gremlin,则必须显式迭代返回的迭代器:

    g.V().drop().iterate()
    

    别忘了...

    ...提交事务。在 Titan 中,事务是隐式打开的,但必须显式关闭

    g.tx().commit()
    

    【讨论】:

    • 谢谢!这也适用于通过 Java 的 Stardog/Gremlin。
    • 哇,我花了一个小时想知道为什么它不起作用,谢谢
    • 将我添加到您为之节省大量时间的人员列表中:) 我不知道 REPL 自动迭代。迭代使用以 Neo4j 作为后端的 Tinkerpop 3.3.1 为我修复了它。
    【解决方案3】:

    你可以试试

    g.V.each{g.removeVertex(it)}
    g.commit()
    

    【讨论】:

      【解决方案4】:

      你可以这样做;

      graph.shutdown();
      TitanCleanup.clear(graph);
      

      【讨论】:

      • 虽然 OP 要求提供一个 gremlin 答案,但这在 Java 中可以通过在上面的示例中将 com.thinkaurelius.titan.core.TitanGraph 作为“图形”传入。
      【解决方案5】:

      在 TinkerPop3 中:

      drop()-step (filter/sideEffect) 用于从图中移除元素和属性(即移除)。

      g.V().drop()
      

      【讨论】:

      • 这适用于 AWS Neptune。令人难以置信的是,这么多人转发了这个答案,而这个答案出现在底部。我通常会寻找第一个回复者来相应地投票。
      【解决方案6】:

      蓝图曾经为此有一个 clear() 方法...

      g.clear()

      但它最近被删除了:

      https://github.com/tinkerpop/blueprints/issues/248

      【讨论】:

        【解决方案7】:

        在 TinkerPop3 中,使用 Titan-1.0.0,

        g.V().drop()
        g.tx().commit()   (commit the changes)
        

        为我工作。你可以试一试

        【讨论】:

          【解决方案8】:
          public class JanusGraphCleanup {
              @Deprecated
              public static void clear(JanusGraph graph) throws BackendException {
                  JanusGraphFactory.drop(graph);
              }
          }
          

          参考:https://github.com/JanusGraph/janusgraph/blob/master/janusgraph-core/src/main/java/org/janusgraph/core/util/JanusGraphCleanup.java

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-03
            • 1970-01-01
            • 1970-01-01
            • 2017-03-02
            • 2021-12-27
            • 1970-01-01
            • 2018-07-14
            • 2019-02-14
            相关资源
            最近更新 更多