[英]Create linked list relationship between nodes having same relation to other nodes in neo4j
[英]Create relation between nodes with same property in Neo4J
我想在同年出生的兩個演員之間建立一種新的關系。
我正在運行此查詢,但似乎不起作用:
MATCH (a:Person)
with a AS personA
MATCH (b:Person)
with b AS personB
WHERE personA.born = personB.born AND personA <> personB
CREATE UNIQUE (personA)-[:HAS_SAME_AGE {sameAge: "Has same age"}]-(personB)
非常感謝。
WITH
子句不包含personA
,因此該變量被刪除。WITH
子句,因此應該省略(為了清楚起見,如果沒有別的)。personA
和personB
變量名稱的MATCH
子句。WHERE
子句將允許處理同一對Person
節點兩次(以相反的順序)。 例如,您可以使用ID(personA) < ID(personB)
而不是personA <> personB
來確保同一對只處理一次。CREATE UNIQUE
,而應使用MERGE
。MERGE
不需要您指定關系的方向——它可以自動為您指定一個。 如果您想將這種關系視為無向關系(在您的情況下是這樣),這是合適的。這是一個處理上述所有項目的查詢:
MATCH (personA:Person), (personB:Person)
WHERE ID(personA) < ID(personB) AND personA.born = personB.born
MERGE (personA)-[:HAS_SAME_AGE {sameAge: "Has same age"}]-(personB)
注意:您可能想要給sameAge
一個布爾值( true
或false
)。 或者,更好的是,完全消除sameAge
,因為HAS_SAME_AGE
關系僅在 2 個相關節點具有相同的年齡時才存在。
此查詢將創建空節點並在空節點和給定節點之間創建關系。
這里的問題是“ personA ”不在“CREATE UNIQUE”的范圍內。
您需要在第二個“with”子句中將它與“personB”一起傳遞。
新版本的 Cypher 不支持CREATE UNIQUE ,請改用MERGE 。
MATCH (a:Person)
with a AS personA
MATCH (b:Person)
with personA, b AS personB
WHERE personA.born = personB.born AND personA <> personB
CREATE UNIQUE (personA)-[:HAS_SAME_AGE {sameAge: "Has same age"}]->(personB)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.