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

时间:2013-10-27 22:29:42

标签: neo4j cypher

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

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

我创建的查询(如果我在浏览器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"}

然后删除该节点。

我错过了什么吗?

谢谢,安迪

6 个答案:

答案 0 :(得分:15)

对于neo4j 2.0,你会做

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

答案 1 :(得分:11)

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

您想制作relationship match optionalMATCH n-[r?]-()

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

因此,您的完整查询是:

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

答案 2 :(得分:8)

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

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

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:4)

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

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

Detach会自动删除所有输入和输出关系。

答案 5 :(得分:0)

根据最新文件,我也测试了它

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

我们必须把()放在n附近,也没有必要吗?在[r?]。

即使没有OPTIONAL也可以。