2013-10-27 41 views
6

我正在玩2.0 M6 neo4j服務器(在win7 64上的oracle jdk7)。使用REST API的密碼查詢刪除節點和關係

我想通過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" : [ ] 
} 

我的測試失敗,因爲該節點仍然可以在neo4j中找到通過其ID服務器...

如果我簡化我查詢只刪除一個節點(即沒有關係),所以它:

START n = node(1920) DELETE n 

,這已經成爲

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

,節點將被刪除。

我錯過了什麼嗎?如果有連接到它的至少一個關係

謝謝,安迪

回答

11

MATCH n-[r]-()將只匹配的節點。

你想使relationship match optionalMATCH n-[r?]-()

此外,您還需要刪除節點之前的關係。

所以,完整的查詢內容是:

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

這是非常有意義的,並做出了改變,你建議它完美的作品:)謝謝。 – user2926169

+6

這是Neo4j 1.x版本的版本。 Neo4j 2引入了一種新的語法:'OPTIONAL MATCH n- [r] - ()'。請參閱Leland Cope的答案。 –

15

對於Neo4j的2.0,你會做

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

兩個START[r?]語法正在被逐步淘汰。通常也不建議直接使用內部ID。嘗試是這樣的:(?)

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

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

+0

所以要刪除所有節點(包括不連接的節點)以及它們之間的關係MATCH(n)可選MATCH(n) - [r] - ()DELETE n,r(很好,它也適用於單行) –

4

問號在Neo4j的2.0.3不支持,所以答案是使用OPTIONAL MATCH

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

4

再次,有一個漂亮的語法變化。的Neo4j 2.3引入了以下:

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

拆離自動刪除所有輸入和輸出的關係。

0

基於最新的文件,我也測試了它

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

我們必須把()圍繞n和也沒有必要呢?在[r?]中。

即使它不工作OPTIONAL

相關問題