32

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

删除 1 v 是这样的:

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

8 回答 8

55

从 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()它不会Traversalremove()那样自动迭代,因此您必须显式调用iterate()才能进行删除。本教程详细讨论了 Gremlin 控制台中的迭代。

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

 JanusGraphFactory.drop(graph)

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

于 2013-06-22T12:30:23.280 回答
30

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

g.V().drop()

为什么这对我不起作用

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

我是如何解决的

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

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

不要忘记...

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

g.tx().commit()
于 2016-02-15T16:36:30.460 回答
21

你可以试试

g.V.each{g.removeVertex(it)}
g.commit()
于 2012-10-10T08:12:25.120 回答
6

您可以按以下方式进行;

graph.shutdown();
TitanCleanup.clear(graph);
于 2014-07-02T12:21:24.157 回答
5

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

g.clear()

但它最近被删除:

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

于 2012-10-14T04:22:20.283 回答
5

在 TinkerPop3 中:

drop() 步骤(filter/sideEffect)用于从图中删除元素和属性(即删除)。

g.V().drop()
于 2015-12-24T07:46:31.873 回答
3

在 TinkerPop3 中,使用 Titan-1.0.0,

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

为我工作。你可以试一试

于 2016-01-08T05:33:19.710 回答
0
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

于 2019-03-22T09:50:29.677 回答