49

使用 Cypher 如何获取图中的所有节点?我正在对图表进行一些测试,并且我有一些没有关系的节点,所以在制作查询时遇到了麻烦。

我想全部获取它们的原因是我想在每次测试开始时删除图中的所有节点。

4

4 回答 4

98

因此,这为您提供了所有节点:

MATCH (n)
RETURN n;

如果要从图中删除所有内容,可以执行以下操作:

MATCH (n)
OPTIONAL MATCH (n)-[r]-() 
DELETE n, r;

更新为 2.0+

编辑:现在在 2.3 他们有DETACH DELETE,所以你可以这样做:

MATCH (n)
DETACH DELETE n;
于 2012-10-15T23:14:08.340 回答
14

这对你有用吗?

START a=node:index_name('*:*')

假设您有一个包含这些孤立节点的索引。

于 2012-10-15T21:11:59.027 回答
7

这在 2.0 中运行良好:

    MATCH n RETURN n
于 2014-02-23T12:06:09.897 回答
0

如果您需要从图中删除大量对象,则需要注意不要构建如此大的单个事务,以免遇到 Java OUT OF HEAP 错误。

如果您的节点每个节点有超过 100 个关系((100+1)*10k=>1010k 删除),请减少批量大小或查看底部的建议。

在 4.4 和更新版本中,您可以使用 CALL {} IN TRANSACTIONS 语法。

MATCH (n:Foo) where n.foo='bar'
CALL { WITH n
DETACH DELETE n
} IN TRANSACTIONS OF 10000 ROWS;

使用 3.x 转发并使用 APOC

call apoc.periodic.iterate("MATCH (n:Foo) where n.foo='bar' return id(n) as id", "MATCH (n) WHERE id(n) = id DETACH DELETE n", {batchSize:10000})
yield batches, total return batches, total

有关在 neo4j 中删除大量数据的最佳实践,请遵循这些指南

于 2022-03-04T11:50:23.573 回答