Neighbors, duplicates and aggregation with Cypher & Neo4j



也许我需要花更多的时间与Cypher文档,但与以下Cypher查询:

MATCH (a)-[:friends|colleagues]-(b)
WHERE 'Boston' IN a.lived_in and 'Boston' IN b.lived_in
WITH a, count(b) as c
RETURN a.name, c

为什么b包含重复项?

[:friends|colleagues]表示"查找所有friendcolleague关系"。

因为节点a可以是另一个节点b的朋友和同事(反之亦然,因为您的查询是非定向的),因此查询可以为任何给定的节点对找到多个结果行。

当您在a上聚合(使用COUNT())时,默认情况下任何重复的b节点都包含在聚合中。

如果您只想计算b的不同结果,您可以使用DISTINCT关键字如下(我还通过删除不必要的WITH子句简化了查询):

MATCH (a)-[:friends|colleagues]-(b)
WHERE 'Boston' IN a.lived_in AND 'Boston' IN b.lived_in
RETURN a.name, COUNT(DISTINCT b) AS c;

最新更新