【发布时间】:2015-09-15 15:44:54
【问题描述】:
也许我需要花更多时间阅读 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 包含重复项?
【问题讨论】:
也许我需要花更多时间阅读 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] 表示“查找所有friend 和colleague 关系”。
因为节点 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;
【讨论】:
b节点的collection,那么你可以在我的查询中使用COLLECT而不是COUNT。不是WITH 是必需的。