Neo4j 计算所有邻居的关系';邻居
假设我有一个名为User的节点,它与另一个用户有“喜欢”的关系 (u1)-[:Likes]->(u2) 然后我有下面的图表:Neo4j 计算所有邻居的关系';邻居,neo4j,Neo4j,假设我有一个名为User的节点,它与另一个用户有“喜欢”的关系 (u1)-[:Likes]->(u2) 然后我有下面的图表: 用户1喜欢4个用户:2、3、4、5 用户2喜欢用户4、1、3、5 用户3喜欢用户4、1、5 用户4喜欢用户1、2、3 用户5喜欢用户4、2、1 对于用户1,我想找出他的邻居和他的邻居拥有的边的总数,而不计算返回给用户1的边。所以应该是: 用户2:3条边(4、3、5) 用户3:2条边(4,5) 用户4:2条边(2,3) 用户5:2条边(4,2) 因此,查询应该返回4
- 用户1喜欢4个用户:2、3、4、5
- 用户2喜欢用户4、1、3、5
- 用户3喜欢用户4、1、5
- 用户4喜欢用户1、2、3
- 用户5喜欢用户4、2、1
- 用户2:3条边(4、3、5)
- 用户3:2条边(4,5)
- 用户4:2条边(2,3)
- 用户5:2条边(4,2)
匹配(u1)-[r:Likes]->(u2)
其中u1.id=1
设置u1.n_边=0
对于u1,COLLECT(DISTINCT(u2.id))作为邻居,COUNT(DISTINCT(u2))作为k
把邻居放松一下
匹配(u3:User{id:n})-[r:Likes]->(u4)
其中u4 u1
对于u1,相邻的k,计数(不同的(u4))作为cnt
设置u1.n_边=u1.n_边+cnt
返回k,u1.n_边
这应该为u1的每个邻居返回一行,其中包含其邻居计数,不包括u1:
MATCH (u1:User) WHERE u1.name = "User 1"
MATCH (u1)-[:LIKES]->(n:User)
MATCH (n)-[:LIKES]->(o) WHERE id(o) <> id(u1)
RETURN n.name, count(*) AS neighbors_excluding_u1
谢谢威廉,这真的很有帮助。
MATCH (u1:User) WHERE u1.name = "User 1"
MATCH (u1)-[:LIKES]->(n:User)
MATCH (n)-[:LIKES]->(o) WHERE id(o) <> id(u1)
RETURN n.name, count(*) AS neighbors_excluding_u1
MATCH (u1:User) WHERE u1.name = "User 1"
WITH (u1)-[:LIKES]->(n:User)
WITH count(*) AS n_neighbors, u1
MATCH (u1)-[:LIKES]->(o:User)-[:LIKES]-(fof:User)
RETURN n_neighbors, count(*) AS fof_rel_count