选择 Cypher 版本

用户可以指定其查询所运行的 Cypher® 版本,在 Cypher 5 和 Cypher 25 之间进行选择。Cypher 版本可以通过为数据库配置默认语言,或者在执行逐个查询时进行设置。

Cypher 25、Cypher 5 和 Neo4j 解释

从 2025 年开始,Neo4j 服务器转向了基于日历的版本控制系统。这意味着 Neo4j 将不再使用其之前的语义版本控制和发布模式(例如 5.25、5.26)。相反,2025 年及以后的版本将遵循 YYYY.MM 格式,从 2025 年 1 月发布的 2025.01 版本开始,随后是 2025 年 2 月发布的 2025.02 版本,依此类推。

Cypher 25 随 Neo4j 2025.06 一同推出。它是在 Cypher 5 的基础上克隆而来的,但包含了新的和更新的功能,同时也移除了一些旧功能。有关 Cypher 25 中包含的新功能、更新功能和移除功能的更多信息,请参阅 新增、弃用、移除和兼容性 页面。

Cypher 25 处于不断演进的状态,Neo4j 的未来版本将为其添加更多功能。在 Neo4j 2026.06 之后的版本中,功能将仅添加到 Cypher 25 中;在下一次 Cypher 发布之前不会移除任何功能。在 Neo4j 2025.06 或更高版本中引入的任何新的 Cypher 功能将仅添加到 Cypher 25 中。

运行 Neo4j 2025.06 或更高版本的用户可以选择使用之前版本的 Cypher(即 Cypher 5)来运行他们的查询。如果选择这样做,Neo4j 将使用在 Neo4j 2025.06 发布时(Cypher 5 被冻结的版本)所存在的 Cypher 5。Cypher 5 不会再添加任何新功能(在 Neo4j 2025.06 之后的服务器版本中,可能仅包含性能增强和最终的错误修复)。因此,Cypher 5 的用户必须迁移到 Cypher 25 才能使用新功能。有关 Cypher 5 的信息,请参阅 Cypher 5 手册

尽管 Neo4j 2025.06+ 数据库目前支持 Cypher 5 查询,但它们最终仍需迁移到 Cypher 25,因为对 Cypher 5 的支持将在未来某个版本中终止(预计不会早于两个额外的服务器 LTS 周期)。

为数据库选择默认 Cypher 版本

Neo4j 2026.02 或更高版本

在 Neo4j 2026.02 或更高版本上创建的数据库会在 neo4j.conf 文件中明确设置 Cypher 25 作为其查询语言:db.query.default_language=CYPHER_25。现有数据库保留其 neo4j.conf 文件。对于两者,都可以使用相同的设置 db.query.default_language 来设置不同的查询语言版本。

如果缺少该设置,默认值为 db.query.default_language=CYPHER_5

在 Aura 中,Cypher 25 是新创建组织的默认版本。附加到所创建数据库的默认查询语言由组织设置“默认 Cypher 版本”决定,并且可以手动更改。

Neo4j 2025.06 - 2026.01

在 Neo4j 2025.06 或更高版本上创建或迁移的数据库,将继续以 Cypher 5 作为默认语言(除非 db.query.default_language 被设置为 CYPHER_25)。这适用于 系统、标准和复合 Neo4j 数据库。但是,可以在新的和现有的系统、标准和复合数据库上设置不同的默认语言。

要在创建数据库时选择默认 Cypher 版本,请将 DEFAULT LANGUAGE <language version> 添加到 CREATE DATABASE 语句中。

示例 1. 创建数据库时选择默认 Cypher 版本
Cypher 25
CREATE DATABASE actors SET DEFAULT LANGUAGE CYPHER 25
Cypher 5
CREATE DATABASE movies DEFAULT LANGUAGE CYPHER 5

要更改现有数据库上的默认 Cypher 版本,请将 SET DEFAULT LANGUAGE <language version> 添加到 ALTER DATABASE 命令中。

示例 2. 更改现有数据库的默认 Cypher 版本
Cypher 25
ALTER DATABASE movies SET DEFAULT LANGUAGE CYPHER 25
Cypher 5
ALTER DATABASE actors SET DEFAULT LANGUAGE CYPHER 5

选择 CYPHER 25 可确保在该数据库上运行的所有查询都将使用当前数据库运行的 Neo4j 版本中所存在的 Cypher 25 来执行(前提是它运行在 Neo4j 2025.06 或更高版本上,除非查询前缀包含 CYPHER 5,这将覆盖此默认值)。

选择 CYPHER 5 作为默认数据库语言可确保在该数据库上运行的所有查询都使用 Neo4j 2025.06 发布时所存在的 Cypher 5(除非查询前缀包含 CYPHER 25,这将覆盖此默认值)。2025.06 发布之后引入的任何更改都不会影响查询的语义。

有关如何更改和查看新数据库、现有数据库以及远程数据库别名的默认语言,以及与更改默认语言相关的新权限的更多信息,请参阅《操作手册》中的以下链接:

有关 Cypher 版本和 DBMS 升级的信息,请参阅《升级和迁移指南》中的 升级和迁移指南 → Cypher 版本

将查询从 Cypher 5 迁移到 Cypher 25

建议修改那些依赖于 Cypher 5 中已弃用、但在 Cypher 25 中已移除的功能的查询,以使其符合 Cypher 25 中引入的变更。

例如,Cypher 25 禁止在 SET 子句的右侧使用 NODERELATIONSHIP 代替 MAP,而是要求在 SET 子句中引用节点或关系之前,使用 properties() 函数获取属性映射。以下示例演示了如何重写在 Cypher 5 中有效的查询,使其能够在 Cypher 25 中运行。

原始 Cypher 5 查询
MATCH (n:Order)-[r:SHIPPED_TO]->(:Address)
SET n = r
修改后的 Cypher 25 查询
MATCH (n:Order)-[r:SHIPPED_TO]->(:Address)
SET n = properties(r)

另一种选择是在各个查询前加上特定的语言版本。

为单个查询选择 Cypher 版本

要选择查询的 Cypher 版本,请在查询前加上 CYPHER <language version>。此选择将覆盖执行该查询的数据库的默认语言,并允许您在默认语言为 Cypher 5 的数据库中使用 Cypher 25 功能,或者在默认语言为 Cypher 25 的数据库中继续运行 Cypher 5 查询。

使用 Cypher 5 运行的查询最终需要更新为 Cypher 25,因为对 Cypher 5 的支持将在未来终止(预计不会早于两个额外的服务器 LTS 周期)。因此,建议将默认语言设置为 Cypher 25 并将必要的查询迁移到其支持的语法,而不是在每个查询前加上 Cypher 版本。

示例 3. 为查询选择 Cypher 版本
在默认语言为 Cypher 5 的 Neo4j 2025.06+ 数据库上运行 Cypher 25 查询
CYPHER 25
MATCH (n:Order)-[r:SHIPPED_TO]->(:Address)
SET n = properties(r)
在默认语言为 Cypher 25 的 Neo4j 2025.06+ 数据库上运行 Cypher 5 查询
CYPHER 5
MATCH (n:Order)-[r:SHIPPED_TO]->(:Address)
SET n = r

选择 CYPHER 25 可确保查询将使用当前数据库运行的 Neo4j 版本中所存在的 Cypher 25 来执行(前提是它运行在 Neo4j 2025.06 或更高版本上)。

选择 CYPHER 5 可确保查询将使用 Neo4j 2025.06 发布时所存在的 Cypher 5 来执行。2025.06 发布之后引入的任何更改都不会影响查询。

过程和函数

过程函数(包括内置函数和 APOC)绑定到特定的 Cypher 语言版本。因此,Neo4j 2025.06+ 和 APOC 2025.06+(两者均以 Cypher 5 作为默认语言)中的过程和函数可能会根据所使用的 Cypher 版本而表现不同。

例如,APOC 2025.06 移除了对过程 apoc.create.uuids() 的 Cypher 25 支持,这意味着它在运行 Cypher 25 的查询中不可用。但是,如果查询前缀包含 CYPHER 5,或者数据库的默认版本设置为 CYPHER 5,它仍然可以在 APOC 2025.06 上使用。在这种情况下,Neo4j 将使用 2025.06 发布时所存在的 APOC 和 Cypher 5。

在 APOC 2025.06+ 中使用已在 Cypher 25 中移除的过程
CYPHER 5
CALL apoc.create.uuids(10)

将 Cypher 版本选择与其他查询选项结合使用

可以将 Cypher 版本选择与其他 查询选项 结合使用。下面的示例为同一个查询同时选择了 Cypher 的版本和 运行时

将 Cypher 版本选择与其他查询选项结合使用
CYPHER 5 runtime=parallel
MATCH (n:Person)
RETURN n.name