6

我正在使用 2.0 M6 neo4j 服务器(win7 64 上的 oracle jdk7)。

我正在尝试使用 REST API 上的单个密码查询来删除节点及其关系。

我创建的查询(如果我在浏览器 UI 中运行它可以工作)看起来像:

START n = node( 1916 ) MATCH n-[r]-() DELETE n, r

当我把它通过 gson 时,结果如下:

{"query":"START n \u003d node( 1916 ) MATCH n-[r]-() DELETE n, r"}

当发送到服务器时得到响应:

{
  "columns" : [ ],
  "data" : [ ]
}

我的测试失败了,因为节点仍然可以通过它的 id 在 neo4j 服务器中找到......

如果我将查询简化为只删除一个节点(没有关系),那么它:

START n = node( 1920 )  DELETE n

变成

{"query":"START n \u003d node( 1920 )  DELETE n"}

然后删除该节点。

我错过了什么吗?

谢谢,安迪

4

6 回答 6

15

对于 neo4j 2.0 你会做

START n=node(1916)
OPTIONAL MATCH n-[r]-()
DELETE r, n;
于 2013-12-14T06:22:10.113 回答
11

MATCH n-[r]-()仅当至少有一个关系附加到该节点时才会匹配该节点。

您想让关系匹配可选MATCH n-[r?]-()

此外,您需要删除节点之前的关系。

因此,您的完整查询是:

START n=node(1916)
MATCH n-[r?]-()
DELETE r, n
于 2013-10-28T18:40:49.477 回答
8

两者START[r?]语法都被逐步淘汰。通常也不建议直接使用内部 ID。尝试类似:

match (n{some_field:"some_val"}) optional match (n)-[r]-() delete n,r

(见http://docs.neo4j.org/refcard/2.1/

于 2014-03-04T05:31:22.797 回答
4

Neo4J 2.0.3 不支持问号(?),所以答案是使用OPTIONAL MATCH

START n=node(nodeid) OPTIONAL MATCH n-[r]-() DELETE r, n;

于 2014-07-30T11:57:33.440 回答
4

再次有一个漂亮的语法变化。Neo4j 2.3 引入了以下内容:

MATCH (n {id: 1916})
DETACH DELETE n

分离会自动删除所有传入和传出关系。

于 2016-01-04T11:00:08.123 回答
0

根据最新的文件,我也测试过

START n=node(1578)
MATCH (n)-[r]-()
DELETE n,r

我们必须把 () 放在 n 周围,也不需要 ? 在 [r?] 中。

即使没有OPTIONAL.

于 2016-05-24T12:27:43.407 回答