运行 Cypher 片段
在 APOC 中,Cypher 可以用作一种安全、具备图感知能力且经过部分编译的脚本语言。
过程概述
下表描述了所支持的过程
| 限定名称 | 类型 |
|---|---|
apoc.cypher.doIt |
|
apoc.cypher.run |
|
apoc.cypher.runMany |
|
apoc.cypher.runFirstColumnMany |
|
apoc.cypher.runFirstColumnSingle |
|
示例:按标签快速统计节点数
使用 count 函数可以快速计算特定标签的节点数量,但前提是查询必须仅包含 count 函数。例如:
MATCH (:Person) RETURN count(*);
也可以使用 UNION ALL 子句组合多个针对特定标签的节点计算
MATCH (:Person) RETURN count(*)
UNION ALL
MATCH (:Movie) RETURN count(*);
使用 WITH 子句则无法实现同样的效果
MATCH (:Person)
WITH count(*) as people
MATCH (:Movie) RETURN people, count(*) as movies;
此查询将通过遍历所有节点来计算数量,这是一个非常缓慢的操作。
为了获得更快的处理速度(可在几毫秒内完成),可以使用 apoc.cypher.run 来构建 COUNT() 语句并分别运行每一条语句。
CALL db.labels() yield label
CALL apoc.cypher.run("match (:`"+label+"`) return count(*) as count", null) yield value
return label, value.count as count
类似的方法也可用于获取每个标签的属性键
CALL db.labels() yield label
CALL apoc.cypher.run("MATCH (n:`"+label+"`) RETURN keys(n) as keys LIMIT 1",null) yield value
RETURN label, value.keys as keys