【问题标题】:Neo4j Cypher: Return a list of distinct edge types with number of occurencesNeo4j Cypher:返回具有出现次数的不同边缘类型的列表
【发布时间】:2018-04-08 06:31:34
【问题描述】:

我知道我可以像这样返回所有不同的边缘类型:

MATCH (a)-[r]->(b)
RETURN distinct(type(r))

如何返回每个不同的类型以及出现次数?

【问题讨论】:

    标签: graph neo4j graph-databases


    【解决方案1】:

    如果您知道类型,则可以使用即时计数存储进行查询。

    MATCH ()-[r:ACTED_IN]->()
    RETURN count(r) as count
    

    不幸的是,关系类型在 Cypher 中不是动态的,您无法通过参数或字符串值指定它们(例如,作为您之前查询的结果)。

    如果您有APOC Procedures,则有一个过程可以快速准确地为您提供所需的信息,但是,来自apoc.meta.stats() 调用的一条数据。

    CALL apoc.meta.stats() YIELD relTypesCount 
    RETURN relTypesCount
    

    【讨论】:

      【解决方案2】:
      match ()-[r]->() return type(r),count(*)
      

      【讨论】:

      • 虽然这在技术上是正确的,因为您最终会得到正确的答案,但此查询不使用计数存储来得出答案。如果你解释这个查询,你会看到它执行 AllNodesScan,然后扩展来自所有节点的所有关系,然后基于类型进行聚合。这种类型的查询不会随着节点和关系的增加而很好地扩展。
      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多