在Neo4J中创建具有相同属性的节点之间的关系

在Neo4J中创建具有相同属性的节点之间的关系,neo4j,cypher,Neo4j,Cypher,我想在同一年出生的两位演员之间建立一种新的关系 我正在运行此查询,但它似乎不起作用: 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

我想在同一年出生的两位演员之间建立一种新的关系

我正在运行此查询,但它似乎不起作用:

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)
匹配(a:个人)
以一个人物的身份
比赛(b:个人)
以b为人
其中personA.born=personB.born和personA personB
创建独特的(人物)-[:拥有相同的年龄{sameAge:“拥有相同的年龄”}]-(personB)

非常感谢。

此查询将创建空节点,并在空节点和给定节点之间创建关系

这里的问题是“角色””不在“创建唯一”的范围内

您需要在second'with'子句中将其与'personB'一起传递。

新版本的Cypher不支持创建唯一的,而是使用合并

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)
匹配(a:个人)
以一个人物的身份
比赛(b:个人)
用personA,b作为personB
其中personA.born=personB.born和personA personB
创建独特的(人物)-[:拥有相同的年龄{sameAge:“拥有相同的年龄”}]>(personB)
  • 在您的查询中,第二个
    WITH
    子句没有包含
    personA
    ,因此该变量被删除
  • 但是在查询中甚至不需要
    WITH
    子句,因此应该省略(为了清楚起见,如果没有其他内容的话)
  • 您的查询也可以很容易地只包含一个
    MATCH
    子句,该子句直接使用
    personA
    personB
    变量名
  • 您的
    WHERE
    子句将允许同一对
    Person
    节点被处理两次(顺序相反)。例如,可以使用
    ID(personA)
    而不是
    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)
    
    匹配(personA:Person),(personB:Person)
    其中ID(personA)

    注意:您可能需要给
    sameAge
    一个布尔值(
    true
    false
    )。或者,更好的方法是完全消除
    sameAge
    ,因为
    具有相同的年龄
    关系只有在两个相关节点具有相同的年龄时才会存在。

    关系具有不同的方向。使用(a)-[]->(b)和(a)谢谢!它对我有用