【问题标题】:Neo4j cypher query for getting the number of relationships to a node, for each distinct labelNeo4j 密码查询,用于获取与节点的关系数,对于每个不同的标签
【发布时间】:2019-10-06 13:26:14
【问题描述】:

我有以下情况:

两种类型的节点; NodeANodeBNodeB 有许多不同的标签(比如[LABEL_i, LABEL_j, etc...]),我想找到从NodeANodeB 的关系数量(比如LIKES),用于每个标签在NodeB

对于单个标签,我可以执行以下操作:

MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:NodeB:LABEL_i) RETURN count(b) as count

为此,我使用标签 LABEL_i 返回与 NodeB 的关系数。

我应该能够将上述逻辑组合成对 Neo4j 的单个查询,但我无法让它工作,我尝试了以下方法(只是响应中的字段):

MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:NodeB) RETURN DISTINCT LABELS(b), count(b), SIZE(LABLES(b)) 

但是我从中得到的数据不是我期望或需要的,我也找不到其他可行的方法,以下也是我尝试过的

FOREACH (lab in ["LABEL_i", "LABEL_j"] | 
  MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:lab) RETURN count(b) as count
)
Neo.ClientError.Statement.SyntaxError: Invalid use of MATCH inside FOREACH (line 2, column 3 (offset: 49))

任何关于如何编写此查询的帮助将不胜感激,我最近才开始使用 Neo4j。

【问题讨论】:

    标签: neo4j cypher graph-databases


    【解决方案1】:

    这总是这样的情况,要么在这里写一个问题,你找到了答案,或者在发布后不久,你偶然发现了正确的解决方案。

    以下是我用来完成问题的方法:

    MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:NodeB)
    WITH DISTINCT labels(b) AS labels
    UNWIND labels AS label
    RETURN DISTINCT label, count(label)
    ORDER BY label
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多