2013-08-13 11 views
12

Wenn ich diese Abfrage ausführen:Wie lösche ich doppelte Beziehungen zwischen zwei Knoten mit Chiffre?

START n1=node(7727), n2=node(7730) 
MATCH n1-[r:SKILL]->n2 RETURN r 

es gibt mir eine Liste von doppelten Beziehungen, die ich zwischen den beiden Knoten haben. Was füge ich der Abfrage des Cipher hinzu, um über die Beziehung zu iterieren, um eine Beziehung zu behalten und den Rest zu löschen?

Antwort

26

dies für zwei bekannte Knoten zu tun:

start n=node(1), m=node(2) match (n)-[r]->(m) 
with n,m,type(r) as t, tail(collect(r)) as coll 
foreach(x in coll | delete x) 

dies für alle Beziehungen global zu tun (dieser Vorgang gewarnt werden könnte, abhängig von der Größe des Diagramms sehr teuer sein):

start r=relationship(*) 
match (s)-[r]->(e) 
with s,e,type(r) as typ, tail(collect(r)) as coll 
foreach(x in coll | delete x) 
+1

In neueren Versionen von neo4j glaube ich, dass die START-Klausel unnötig ist, oder? Es scheint ohne dasselbe zu funktionieren. –

+0

Ich habe nicht verstanden, wie das funktionierte, bis mir klar wurde, dass "tail" alles außer dem ersten Element zurückgibt. Vielen Dank! – fiat

Verwandte Themen