繁体   English   中英

Neo4j 计数查询

[英]Neo4j count Query

match(m:master_node:Application)-[r]-(k:master_node:Server)-[r1]-(n:master_node) 
where (m.name contains '' and (n:master_node:DeploymentUnit or n:master_node:Schema)) 
return distinct m.name,n.name

嗨,我正在尝试获取上述查询的总记录数。如何使用 count 函数更改查询以直接获取记录数。

提前致谢

以下查询使用聚合函数COUNT 不同的m.name, n.name值对用作“分组键”。

MATCH (m:master_node:Application)--(:master_node:Server)--(n:master_node) 
WHERE EXISTS(m.name) AND (n:DeploymentUnit OR n:Schema)
RETURN m.name, n.name, COUNT(*) AS cnt

我假设m.name contains ''在您的查询中m.name contains ''是为了测试m.name的存在。 此查询使用EXISTS()函数来更有效地进行测试。

[更新]

要确定 DB 中不同的nm对的数量(而不是每对出现在 DB 中的次数):

MATCH (m:master_node:Application)--(:master_node:Server)--(n:master_node) 
WHERE EXISTS(m.name) AND (n:DeploymentUnit OR n:Schema)
WITH DISTINCT m.name AS n1, n.name AS n2
RETURN COUNT(*) AS cnt

进一步加快查询速度需要考虑的一些事项:

  1. MATCH模式中删除不必要的标签测试。 例如,我们可以省略任何节点的master_node标签测试吗? 事实上,我们是否可以在不影响结果有效性的情况下省略对任何节点的所有标签测试? (不过,您可能需要在至少一个节点上添加标签,以避免在开始查询时扫描所有节点。)

  2. 您能否为每个关系添加一个方向(以避免必须在两个方向上遍历关系)?

  3. MATCH模式中指定关系类型。 这将更早地过滤掉不需要的路径。 一旦你这样做了,你也可以从模式中删除一些节点标签,只要你仍然可以获得相同的结果。

  4. 使用PROFILE子句来评估不同 Cypher 查询所需的数据库命中数。

您可以在此处的 Neo4j 文档中找到有关如何使用计数的示例

在你的情况下,第一个例子是:

count(*)

用于返回每个返回项目应该工作的计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM