Mein Datenbankmodell hat Benutzer und MAC-Adressen. Ein Benutzer kann mehrere MAC-Adressen haben, aber ein MAC kann nur zu einem Benutzer gehören. Wenn ein Benutzer seinen MAC einstellt und dieser MAC bereits mit einem anderen Benutzer verknüpft ist, wird die bestehende Beziehung entfernt und eine neue Beziehung zwischen dem neuen Besitzer und dieser MAC erstellt. Mit anderen Worten, ein MAC bewegt sich zwischen Benutzern.Neo4j: MERGE erstellt doppelte Knoten
Dies ist eine bestimmte Instanz der Cypher Abfrage verwende ich MAC-Adressen zuweisen:
MATCH (new:User { Id: 2 })
MERGE (mac:MacAddress { Value: "D857EFEF1CF6" })
WITH new, mac
OPTIONAL MATCH()-[oldr:MAC_ADDRESS]->(mac)
DELETE oldr
MERGE (new)-[:MAC_ADDRESS]->(mac)
Die Abfrage in meinen Tests fein läuft, aber in der Produktion, es aus irgendeinem seltsamen Grund manchmal schafft Dupliziere MacAddress
Knoten (und eine neue Beziehung zwischen dem Benutzer und jedem dieser Knoten). Das heißt, ein bestimmter Benutzer kann mehrere MacAddress
Knoten mit demselben Value
haben.
Ich kann sagen, dass sie verschiedene Knoten sind, weil sie unterschiedliche Knoten-IDs haben. Ich bin mir auch sicher, dass die Value
s genau das gleiche sind, weil ich eine collect(distinct mac.Value)
auf sie tun kann und das Ergebnis ist eine Sammlung mit einem Element. Die obige Abfrage ist die einzige im Code, die MacAddress
Knoten erstellt.
Ich benutze Neo4j 2.1.2. Was ist denn hier los?
Danke, Jan
Mehr ich benutze neo4j weniger Haare auf meinem Kopf .. –