查找具有多个公共关系的节点

时间:2019-05-12 08:05:09

标签: neo4j cypher

我使用CREATE UNIQUE来确定具有一种共同关系的节点:

MATCH (u1:User)-[a:Score]->(g:Games)<-[b:Score]-(u2:User)
WITH u1, u2
CREATE UNIQUE (u1)-[:Common]->(u2)

但是当我想确定用户具有多个(例如3个)共同关系并显示一对用户共有的游戏数量时,我遇到了问题。我尝试了不同的查询,这是其中之一:

MATCH (u1:User)-[a:Score]->(g:Games)<-[b:Score]-(u2:User)
MATCH (u1)-[a:Score]->(g1:Games), (u1)-[b:Score]->(g2:games)
WITH u1, u2, COUNT(DISTINCT s1) AS s1Count, COUNT(DISTINCT s2) AS s2Count
MATCH (u1)-[a:Score]->(g:Games)<-[b:Score]-(u2)
WITH u1, u2, s1Count, s2Count, COUNT(g) AS commonGamesCount
WHERE commonGamesCount >= 3
RETURN u1, u2

我希望看到的结果与CREATE UNIQUE完全一样。

1 个答案:

答案 0 :(得分:0)

您可以计算共同的关系:

MATCH (u1:User)-[a:Score]->(g:Games)<-[b:Score]-(u2:User)
WITH u1, u2, count(g) as g_count
WHERE g_count >= 3
CREATE UNIQUE (u1)-[:Common3]->(u2)