我想在具有一个或多个共同点的节点之间创建关系,并希望将常用事物的数量设置为关系中的属性。
例如:在电影教程图中,我想在同一部电影中一起演出的演员之间建立关系,并将他们一起演出的电影的设定数量作为关系中的属性。
对于基本计数,本教程提供了一个查询:
MATCH (n)-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors)
RETURN n.name, coActors.name, count(*) AS Strength ORDER BY Strength DESC
这给了我一个2个名字的列表和他们一起玩电影的次数(fe“Keanu Reeves”,“Carrie-Anne Moss”,力量:3 - &gt;因为里面有3个Matrix电影曲线图。)
现在我想在这些对之间创建一个关系(ACTED_WITH),并将strength-value设置为其中的属性。 我可以创建这样的关系:
MATCH (a)-[:ACTED_IN]->(p)<-[:ACTED_IN]-(b) MERGE (a)-[r:ACTED_WITH]->(b)
MERGE确保只创建了一个关系,但我无法让计数内容与创建一起使用。
答案 0 :(得分:1)
我不确定你想要什么,但也许是这样的:
MATCH (a)-[:ACTED_IN]->(m)<-[:ACTED_IN]-(b)
WITH a,b, collect(m) AS movies ORDER BY size(movies) DESC
MERGE (a)-[r:ACTED_WITH]-(b)
ON CREATE SET r.Strength=SIZE(movies)
答案 1 :(得分:0)
您可以使用SET Cypher clause在匹配的节点上设置属性。如果您尝试在MERGE子句中进行设置,则merge会将密钥视为唯一标识符,并且如果尚未存在该特定值,则会创建新关系。 / p>
MATCH (a)-[:ACTED_IN]->(p)<-[:ACTED_IN]-(b)
MERGE (a)-[r:ACTED_WITH]->(b)
// reduce matched set to one row of data
WITH DISTINCT a, b, r, COUNT(p) as strength, COLLECT(p) as movies
// set r
SET r.strength = strength
// Return everything to verify above results
RETURN *
SET将覆盖任何先前的值。如果您只想在创建关系时进行设置,可以使用ON CREATE或ON MATCH。