Neo4J Cypher - 计算匹配节点的关系

Neo4J Cypher - Count Relationships of Matched Nodes

我正在做一个小项目,我必须在 Twitter 等用户之间保持关注。我正在尝试查询 returns 某个节点的关注者,我们称它为 "X" 节点。所以查询returns"X"的关注者和"X"的关注者的关注者数量以及"X"的关注者关注的节点数,包括"X" 在那个计数。对不起,文字游戏。让我们看一个带图片的例子:

我有以下节点:

并且我想知道节点2的所有关注者以及我之前提到的其关注者的数量。我创建了下一个查询:

MATCH (:User{id:2})<-[:Follows]-(followers)
OPTIONAL MATCH (followers)-[r1:Follows]->(:User)
OPTIONAL MATCH (:User)-[r2:Follows]->(followers)
RETURN followers.id, count(r1) AS Follows, count(r2) AS Following;

但它在两个值上失败了:节点 1 跟随的节点数和节点 6 跟随的节点数:

在这里你可以看到所有的关系:

如有任何帮助,我们将不胜感激。谢谢

我认为你的两个可选匹配背靠背会导致一些重复的结果(考虑每个阶段的输出以及涉及的变量...多行匹配每个关注者正在关注的人与交叉产品谁在关注每个关注者的所有行匹配项)。

虽然您可以通过在每次可选匹配之后组装数据(获取计数)来解决此问题,但更好的方法是从使用可选匹配切换到直接使用 SIZE 函数获取关系的数量:

MATCH (:User{id:2})<-[:Follows]-(followers)
RETURN followers.id, SIZE((followers)-[:Follows]->()) AS Follows, SIZE(()-[:Follows]->(followers)) AS Following