在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)谢谢!它对我有用