2016-04-11 3 views
1

Ich verwende Chiffre. Ich versuche, alle ausgehenden Beziehungen zu löschen, bevor ich neue in derselben Abfrage erstelle. Ich habe seltsame Situation, wenn die Beziehungen/Knoten bereits existierten, funktioniert es wie erwartet. wenn Sie nie erstellt worden, bevor ich:Ausgehende Beziehungen für dieselbe Abfrage löschen und zusammenführen

(no changes, no rows) 

Dies ist meine Frage:

match (user{userId:'a'})-[r:nearby_wifi]->() delete r 
MERGE (p1:BT{userId:'a'}) WITH p1, [{bssid:"0a:18:d6:c1:3d:fd",level:"-51",timestamp:"1973-08-27 02:26:35.423",venueName:""},{bssid:"04:18:d6:c2:3e:2a",level:"-55",timestamp:"1973-08-27 02:26:35.425",venueName:""},{bssid:"0e:18:d6:c1:3d:fd",level:"-53",timestamp:"1973-08-25 11:06:07.392",venueName:""}] AS wifis 
UNWIND wifis AS wifi 
MERGE (p2:WIFI{bssid: wifi.bssid}) 
MERGE (p1)-[r1:nearby_wifi]->(p2) 
SET r1.dist=wifi.dist 
SET p1.lastTimeActive=1460378030215 
SET p2.level=wifi.level 
SET p2.timestamp=wifi.timestamp 
SET p2.venueName=wifi.venueName 

Jede Idee, warum bei der Kombination löschen und die Zusammenführung Hinrichtungen habe ich keine Änderungen (wenn Graph leer)?

Danke.

Antwort

0

zuerst ersetzen match mit optional match

Zum Beispiel, wenn Sie keinen Client-Knoten in Ihrer Datenbank haben, aber Abfrage einig Person Knoten

Match (p:Client) with p Match (r:Person) return * 

wird nichts bekommen, aber Abfrage

Optional Match (p:Client) with p Match (r:Person) return * 

gibt Ihnen Personen. Ich denke, dass der Neo4j-Optimierer die Ausführung der Abfrage beendet, nachdem er keine Ergebnisse erhalten hat, und mit optional match wird der Wert null und die Ausführung fortgesetzt.

+0

Optionale Übereinstimmung hat den Trick gemacht. aber ich bin mir nicht sicher, warum ich das verstehe. Warum, wenn das Diagramm leer ist, wird die optionale Übereinstimmung die zweite Abfrage ausführen lassen? – rayman

+0

Ich fürchte, mein Wissen ist nicht tief genug, um diese Frage zu beantworten. Ich habe es durch Übung herausgefunden und angenommen, dass, wenn irgendeine Abfrage nichts zurückgibt (nicht null, null ist etwas), sie nicht weiter ausgeführt wird, aber ich habe wirklich nie nach dieser Fiture-Explonation in der Dokumentation gesucht. – Evgen

Verwandte Themen