簡體   English   中英

在 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)

非常感謝。

  1. 在您的查詢中,第二個WITH子句不包含personA ,因此該變量被刪除。
  2. 但是在您的查詢中甚至不需要兩個WITH子句,因此應該省略(為了清楚起見,如果沒有別的)。
  3. 您的查詢也可以很容易地只包含一個直接使用personApersonB變量名稱的MATCH子句。
  4. 您的WHERE子句將允許處理同一對Person節點兩次(以相反的順序)。 例如,您可以使用ID(personA) < ID(personB)而不是personA <> personB來確保同一對只處理一次。
  5. 不推薦使用CREATE UNIQUE ,而應使用MERGE
  6. 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一個布爾值( truefalse )。 或者,更好的是,完全消除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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM