与Cypher& amp;的相邻,重复和聚合Neo4j的

时间:2015-09-15 15:44:55

标签: 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包含重复项?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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;