2013-10-27 3 views
6

Ich bin mit 2,0 M6 Neo4j Server (Oracle JDK7 auf win7 64) zu spielen.löschen Knoten und Beziehungen Chiffre Abfrage über REST-API

Ich versuche, einen Knoten und seine Beziehungen mit einer einzigen Abfrage cipher über die REST-API zu löschen.

Die Abfrage, die ich schaffen (was funktioniert, wenn ich es im Browser-Benutzeroberfläche ausgeführt wird) wie folgt aussieht:

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

:

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

, die von der Zeit, die ich durch Gson wie kommt aus setzen Bei der Übermittlung an den Server wird die Antwort erhalten:

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

Mein Test schlägt fehl, weil der Knoten immer noch in Neo4j gefunden werden kann Server durch seine id ...

Wenn ich meine Abfrage vereinfachen, um nur einen Knoten zu löschen (das keine Beziehungen hat) so seine:

START n = node(1920) DELETE n 

Welche

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

Dann wird der Knoten wird ist gelöscht.

Habe ich etwas verpasst?

Danke, Andy

Antwort

11

MATCH n-[r]-() wird nur der Knoten übereinstimmen, wenn zumindest eine Beziehung zu ihm angebracht ist.

Sie wollen die relationship match optional machen: MATCH n-[r?]-()

Auch Sie müssen die Beziehungen vor dem Knoten löschen.

Also, Ihre vollständige Abfrage ist:

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

Das macht vollkommen Sinn und die Änderungen vorgenommen, die Sie vorschlagen, dass es perfekt funktioniert :) Danke. – user2926169

+6

Dies ist valide in Neo4j 1.x Version. Neo4j 2 führte eine neue Syntax ein: 'OPTIONAL MATCH n- [r] -()'. Siehe Leland Cope Antwort. –

15

Für Neo4j 2.0 Sie

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

Sowohl START und die [r?] Syntax werden auslaufen. Es wird normalerweise auch nicht empfohlen, interne IDs direkt zu verwenden. Probieren Sie etwas wie: (?)

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

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

+0

um alle Knoten (einschließlich der getrennten) und ihre Beziehungen zu löschen, machst du MATCH (n) OPTIONAL MATCH (n) - [r] -() Lösche n, r (schön, dass es auch in einer Zeile funktioniert) –

4

Das Fragezeichen ist nicht in Neo4j 2.0.3 unterstützt werden, so wäre die Antwort zu verwenden OPTIONAL MATCH

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

4

Und wieder gibt es eine schöne Syntaxänderung. Neo4j 2.3 führt Folgendes ein:

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

Trennen löscht automatisch alle ein- und ausgehenden Beziehungen.

0

auf aktuelle Dokumente, und ich habe es auch

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

getestet Wir haben() um n zu setzen und es gibt auch keine Notwendigkeit? in [r?].

Auch funktioniert es ohne OPTIONAL.