2014-03-26 11 views
15

Ich kann keinen Weg finden, einen Beziehungstyp in Cypher zu ändern. Ist diese Operation überhaupt möglich? Wenn nicht: Wie kann dieses Ergebnis am besten erreicht werden?neo4j cypher: Wie man den Typ einer Beziehung ändert

+2

Wenn Sie die [apoc Verfahren Plugin] verwenden (https://neo4j-contrib.github.io/neo4j-apoc-procedures/) Sie können einfach verwenden 'nennen apoc.refactor.setType (rel ' NEW-TYPE ') ', um den Beziehungstyp einfach zu ändern. Es tut automatisch, was Sie sonst manuell tun müssten (gemäß den Antworten). – ADTC

Antwort

33

Leider ist momentan keine direkte Änderung des Rel-Typs möglich.

können Sie tun:

MATCH (n:User {name:"foo"})-[r:REL]->(m:User {name:"bar"}) 
CREATE (n)-[r2:NEWREL]->(m) 
// copy properties, if necessary 
SET r2 = r 
WITH r 
DELETE r 
+1

brilliant! (hinzugefügt 'WITH' sonst die Abfrage fehlgeschlagen ist) – Sovos

+0

Ausgezeichnete Antwort. Dies löscht jedoch nur die Beziehung & retourniert die ID dieser Beziehung & zeigt keine aktualisierte Beziehung an, bis die Klausel 'WITH' hinzugefügt wurde, wie oben erwähnt und von @LoveTW beantwortet. Ich gebe dir "+ 1" für die schnellste Antwort **. – OO7

+0

Ich frage mich, ob Sie MERGE dafür jetzt nicht verwenden können? – Kebman

3

Sie können nicht, die Art einer Beziehung konstitutiv oder wesentlich ist, Etiketten Knoten im Gegensatz, die beliebige Beutel Gruppenknoten sind. (Siehe this q/a for an analogy.) Sie müssen die neue Beziehung erstellen, die alte löschen (und Eigenschaften kopieren, falls vorhanden).

9

Die Antwort von Michael Hunger ist korrekt, aber es braucht noch with in dieser Chiffre Abfrage. WITH kann verwendet werden, wenn Sie verschiedene Operationen in einer Chiffreabfrage wechseln möchten. http://docs.neo4j.org/chunked/stable/query-with.html

MATCH (n:User {name:"foo"})-[r:REL]->(m:User {name:"bar"}) 
CREATE (n)-[r2:NEWREL]->(m) 
SET r2 = r 
WITH r 
DELETE r 
0

Ich verwende die folgenden, wenn es zu ändern.

match (from:Label1 { prop: 1 })-[r:RELATIONSHIP]->(to:Label2 { prop: 2 }) 
with from, r, to 
create (from)-[:NEW_RELATIONSHIP]->(to) 
with r 
delete r 
Verwandte Themen