运行 Cypher 片段

Cypher 可以在 APOC 中用作安全、图感知、部分编译的脚本语言。

过程概述

支持的过程在下表中描述

限定名称 类型

apoc.cypher.doIt
apoc.cypher.doIt(statement STRING, params MAP<STRING, ANY>) - 使用给定参数运行动态构建的语句。此过程允许读取和写入语句。

过程

apoc.cypher.run
apoc.cypher.run(statement STRING, params MAP<STRING, ANY>) - 使用给定参数运行动态构建的只读语句。

过程

apoc.cypher.runMany
apoc.cypher.runMany(statement STRING, params MAP<STRING, ANY>, config MAP<STRING, ANY>) - 运行每个以分号分隔的语句,并返回语句结果的摘要。

过程

apoc.cypher.runFirstColumnMany
apoc.cypher.runFirstColumnMany(statement STRING, params MAP<STRING, ANY>) - 使用给定参数运行给定语句,并将第一列收集到 LIST<ANY> 中返回。

函数

apoc.cypher.runFirstColumnSingle
apoc.cypher.runFirstColumnSingle(statement STRING, params MAP<STRING, ANY>) - 使用给定参数运行给定语句,并返回第一列的第一个元素。

函数

示例:按标签快速计数节点

可以使用 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
© . All rights reserved.