【问题标题】:Why doesn't labels(n) function return the correct count?为什么标签(n)函数不返回正确的计数?
【发布时间】:2018-02-13 19:17:20
【问题描述】:

我想计算我的图表中有多少个标签并执行以下操作:

match (n) return (count(labels(n)))

当我从浏览器中以不同颜色突出显示的列出的标签中看到时,此语句返回的计数与计数不同。浏览器中列出的标签比函数返回的数量多两个。

这是为什么呢?

【问题讨论】:

  • 您的查询未返回计数。你能澄清你的问题吗?
  • @cybersam 请看我的编辑。错字。

标签: neo4j cypher


【解决方案1】:

你的查询是获取每个节点的标签集合,然后统计有多少个集合,也就是节点的个数。

要获得数据库中标签的数量,您可以使用 APOC 过程apoc.meta.stats,它会返回各种数据库统计信息。对于您的具体情况,您可以这样做:

CALL apoc.meta.stats() YIELD labelCount
RETURN labelCount;

【讨论】:

  • 如果您询问如何获取每个标签的节点数,请参阅this answer
  • 我尝试了 CALL 命令,但它返回的节点类型比我实际拥有的多 4 种。我只想统计所有标签类型。
  • 是的,在他的回答下查看我的 cmets。
  • @user697911 如果您的数据库有索引和/或约束,那么标签计数可以包括它们的标签,即使您实际上没有带有这些标签的节点。顺便说一句:在 neo4j 术语中,节点有“标签”,关系有“类型”。应避免使用术语“标签类型”和“节点类型”。
【解决方案2】:

此密码查询将返回节点标签列表及其计数:

match (n) return labels(n),count(n)

如果您要查找特定标签的计数,请使用

match (n:{your label}) return count(n)

如果你想计算不同标签的数量:

match (n) with collect(distinct labels(n)) as NL return size(NL)

【讨论】:

  • 所有这些查询都有缺陷。 LABELS 函数返回标签的collection,因为节点可以有多个标签。因此,如果数据库中的所有节点最多有一个标签,那么第一个和第三个查询只会(在某种程度上)合理地工作。第二个查询使用旧的parameter 语法作为“您的标签”,但参数不能用作MATCH 中的标签。
  • 正确,我确实假设每个节点有一个标签。这个问题没有提出其他建议。问题中还有其他含糊之处,表明其他答案可能是相关的。我错误地使用了 {}。
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多