繁体   English   中英

Neo4j 计数不可预测

[英]Neo4j count is not predictable

使用指南中的优先附件示例,我有一个度数为 3 的节点 C 和度数为 1 的节点 E

UNWIND [["A", "C"], ["A", "B"], ["B", "D"],
    ["B", "C"], ["B", "E"], ["C", "D"]] AS pair
MERGE (n1:Node {name: pair[0]})
MERGE (n2:Node {name: pair[1]})
MERGE (n1)-[:FRIENDS]-(n2)

当我尝试对节点 EI 进行简单度数查询时,得到正确答案。 但是当我添加另一个节点时,答案变为 3

MATCH (e:Node {name: 'E'})--(othere)
RETURN e,othere, count(othere) 

计数返回 1(其他)

MATCH (c:Node {name: 'C'})--(otherc)
MATCH (e:Node {name: 'E'})--(othere)
RETURN e,othere, count(othere)

计数(其他)返回 3。 为什么会这样?

在最后一个查询的RETURN子句中, 聚合 functionCOUNT计算具有相同eothere的结果行数 使用您的样本数据,有 3 个这样的结果行。

这是正确计算eothere之间关系数量的一种方法:

MATCH (c:Node {name: 'C'})--(otherc)
MATCH (e:Node {name: 'E'})-[r]-(othere)
RETURN e, othere, COUNT(DISTINCT r)

[讨论]

通常,任何 2 个节点之间可以有任意数量的关系。 因此,为了进行更一般的讨论,假设“E”节点与“B”节点有 2 个关系(并且没有其他关系)。

  • 我的查询将返回正确的COUNT (degree) 2。请记住,节点的度数是它的关系数

  • 返回COUNT(DISTINCT othere)而不是COUNT(DISTINCT r)的类似查询将返回 1,这是不正确的。

  • 您的第二个查询的 return 子句( RETURN e, othere, COUNT(othere) )子句将返回COUNT 6(因为othere会有 6 个结果行)。

我希望这有助于弄清楚我为什么使用COUNT(DISTINCT r) 您还应该仔细阅读汇总的 function文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM