【问题标题】:Neo4J Cypher - Count Relationships of Matched NodesNeo4J Cypher - 计算匹配节点的关系
【发布时间】:2016-09-23 04:22:20
【问题描述】:

我正在做一个小项目,我必须在 Twitter 等用户之间保持关注。我正在尝试进行一个返回某个节点的追随者的查询,我们称之为“X”节点。因此,查询返回“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 之后的节点数:

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

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: neo4j count cypher relationship


    【解决方案1】:

    我认为背靠背进行两次可选匹配会导致一些重复的结果(考虑每个阶段的输出以及所涉及的变量...多行匹配每个追随者关注的对象,并与所有追随者的行匹配)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多