neo4j 添加 return 更改匹配的节点数量

neo4j adding a return changes the amount of nodes matched

我正在尝试执行搜索以获取一些基本数据。

MATCH(l:letter)-[:RECIPIENT]-(a:address{country: "England"})
RETURN a

结果 = 56

备注

处理信件时,如果地址不在数据库中,则添加该地址,如果它已经存在,则创建与现有节点的关系。 因此,这里不应该存在不连接到 letter 节点的地址,尽管 relationship 可能是 sender 而不是 recipient.

如果我添加字母计数,我会得到不同的地址计数。

MATCH(l:letter)-[:RECIPIENT]-(a:address{country: "England"})
RETURN a, l

结果 - a = 2, l = 298

同样,如果我 return 只有字母,我会再次得到不同的数字。

MATCH(l:letter)-[:RECIPIENT]-(a:address{country: "England"})
RETURN l

结果 - l = 300

我错过了什么?

我还以为MATCH定义了查询,RETURN只是选择要显示的部分信息,RETURN如何改变匹配的数据?

要得到字母节点的总数,需要加上DISTINCT。

MATCH(l:letter)-[:RECIPIENT]-(a:address{country: "England"})
RETURN count(distinct l) as numLetterNodes
MATCH(l:letter)-[:RECIPIENT]-(a:address{country: "England"})
RETURN count(distinct a) as numAddressNodes

当您开始组合结果中的字母和地址时,您最终会得到每行的聚合。

MATCH(l:letter)-[:RECIPIENT]-(a:address{country: "England"})
RETURN DISTINCT a.id, count(l) as lettersPerAddress
MATCH(l:letter)-[:RECIPIENT]-(a:address{country: "England"})
RETURN DISTINCT l.id, count(a) as addressesPerLetter