使用REST API上的cypher查询删除节点和关系

use*_*169 6 neo4j cypher

我正在玩2.0 M6 neo4j服务器(win7 64上的oracle jdk7).

我正在尝试使用REST API上的单个cypher查询删除节点及其关系.

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

START n = node( 1916 ) MATCH n-[r]-() DELETE n, r
Run Code Online (Sandbox Code Playgroud)

当我把它通过gson时,它出现为:

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

发送到服务器时获取响应:

{
  "columns" : [ ],
  "data" : [ ]
}
Run Code Online (Sandbox Code Playgroud)

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

如果我简化我的查询只是删除一个节点(没有关系)所以它:

START n = node( 1920 )  DELETE n
Run Code Online (Sandbox Code Playgroud)

哪个成了

{"query":"START n \u003d node( 1920 )  DELETE n"}
Run Code Online (Sandbox Code Playgroud)

然后删除该节点.

我错过了什么吗?

谢谢,安迪

小智 15

对于neo4j 2.0,你会这样做

START n=node(1916)
OPTIONAL MATCH n-[r]-()
DELETE r, n;
Run Code Online (Sandbox Code Playgroud)


Tat*_*die 11

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

您希望使关系匹配可选:MATCH n-[r?]-()

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

因此,您的完整查询是:

START n=node(1916)
MATCH n-[r?]-()
DELETE r, n
Run Code Online (Sandbox Code Playgroud)

  • 这是Neo4j 1.x版本的价值.Neo4j 2引入了一种新语法:`OPTIONAL MATCH n- [r] - ()`.请参阅Leland Cope的答案. (6认同)

JnB*_*ymn 8

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

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

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