我的數據庫模型有用戶和MAC地址。一個用戶可以有多個MAC地址,但一個MAC只能屬於一個用戶。如果某個用戶設置了自己的MAC,並且該MAC已經鏈接到另一個用戶,則現有關係將被刪除,並在新所有者與該MAC之間建立新的關係。換句話說,MAC在用戶之間移動。Neo4j:MERGE會創建重複節點
這是我使用指定的MAC地址Cypher支架查詢的特定實例:
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)
查詢運行在我的測試正常,但在生產中,它有時創建一些奇怪的原因重複MacAddress
節點(以及用戶和每個這些節點之間的新關係)。也就是說,一個特定的用戶可以有多個MacAddress
節點,並且具有相同的Value
。
我可以告訴他們是不同的節點,因爲他們有不同的節點ID。我也確定Value
完全一樣,因爲我可以在它們上面做一個collect(distinct mac.Value)
,結果是一個元素的集合。上面的查詢是創建MacAddress
節點的代碼中唯一的一個。
我正在使用Neo4j 2.1.2。這裏發生了什麼?
感謝, 揚
更多我使用neo4j更少的頭髮留在我的頭上.. – 2017-02-02 12:08:25