从旧版本升级

此页面包含从 4.4 版到 5.x 版驱动程序的新功能和重大变更列表。有关完整变更列表,请参阅 驱动程序 → 变更日志

Neo4j 驱动程序迁移助手通过根据您的应用程序上下文化变更日志来简化升级过程。它扫描您的代码库以查找弃用和删除的使用情况,并将它们呈现在您面前。该工具不会自动重写您的代码;它只会指出需要采取行动的地方,并提供关于如何处理每个命中项的上下文信息。

5.x 系列的最新驱动程序版本 (5.28) 与 Neo4j 服务器 4.4 和 5.x 均兼容,因此您可以在升级服务器之前升级驱动程序。同时,驱动程序版本 4.4 向后兼容 Neo4j 服务器 5.x,因此您也可以在驱动程序之前升级服务器;然而,鉴于应用程序升级比服务器升级更容易回滚,建议从驱动程序开始升级。

将 Neo4j 服务器升级到新版本时,应用程序中的 Cypher 查询可能也需要更新。驱动程序迁移助手不涵盖 Cypher 变更。
请参阅 Cypher → 弃用、新增和兼容性

使用迁移助手,推荐的升级步骤如下:

  1. 设置助手的工作环境。下载 Drivers Migration Assistant zip 文件,解压,并进入其目录。然后,假设已安装 python3pip3

    python3 -m venv virtualenvs/neo4j-migration
    source virtualenvs/neo4j-migration/bin/activate
    pip3 install -r requirements.txt
  2. 使用默认配置运行迁移助手,并解决它发现的所有问题。path 参数支持 glob 模式匹配,并且可以重复使用。

    python3 main.py -l go /path/*.go /path-recursive/**/*.go
  3. 使用正则表达式解析器重新运行助手,并检查是否出现更多合法问题。

    python3 main.py -l go --regex-parser /path/*.go /path-recursive/**/*.go

    正则表达式解析器可以检测隐式函数调用和其他难以解析的表达式,但很可能会产生更多的误报(更多信息请参阅 Neo4j 驱动程序迁移助手 → 准确性)。您可以将任何虚假条目添加到忽略列表中,这样助手在未来的运行中就不会再提示它们。

  4. 尽管助手可以检测到大多数需要采取行动的位置,但有些变更日志条目无法以这种形式显示,因此您仍应查阅重大变更部分,并审查您的代码库中表格中标有 的变更。

  5. 您已准备好将驱动程序包升级到新版本。
    请注意,您的包含指令也需要更新。

    go get github.com/neo4j/neo4j-go-driver/v5

新功能

支持 Go 1.23

驱动程序兼容从 1.18 到 1.23 的所有 Go 版本。

neo4j.ExecuteQuery():在不深入了解驱动程序内部细节的情况下运行事务

此新函数是 SessionWithContext.ExecuteRead/Write() 的封装器,它抽象了结果处理部分,直接向调用者返回记录列表。

请参阅 查询数据库

支持用户提供的 Context 实例

社区长期要求的功能:驱动程序现在公开了一组 API,这些 API 会考虑用户提供的 context.Context 实例。入口点是 neo4j.NewDriverWithContext()

改进了对泛型的支持

函数 neo4j.GetRecordValue()neo4j.GetProperty() 允许提取指定类型的属性和记录值。

函数 neo4j.ExecuteRead()neo4j.ExecuteWrite() 提供了 SessionWithContext.ExecuteRead/Write() 的泛型变体。

重新认证

允许轮换身份验证令牌以及会话范围查询范围的身份验证。

相互 TLS (mTLS) 作为第二身份验证因子 (2FA)

允许配置客户端 TLS 证书以对服务器进行身份验证。

请参阅 相互 TLS

BookmarkManager 支持

书签管理器使实现会话的因果链更加容易。

请参阅 协调并行事务

通知过滤 API

过滤允许仅接收服务器通知的子集,并提高服务器端性能。

ResultSummary 中查询的 GQL 状态

这些是符合 GQL 的状态对象。新的方法 ResultSummary.GqlStatusObject() 可用。它返回一个 GqlStatusObject 列表,其中包含有关查询执行的信息。

此 API 计划取代当前的通知 API。

遥测

驱动程序将匿名 API 使用统计信息发送到服务器。使用驱动程序配置 TelemtryDisabled = true 可选择退出。

更多信息,请参阅 遥测 API

重大变更和弃用

“助手”列表示 Neo4j 驱动程序迁移助手是否可以检测与给定变更日志条目相关的问题。带有叉号 的条目需要手动检查。

弃用功能可能会在版本 6 中移除。

版本 消息 状态 助手

5.0

最低支持的 Go 版本为 1.18。

已变更

5.0

ExplicitTransaction — 现在禁止多次调用 Rollback()Commit(),否则将导致 UsageError

已变更

5.0

对已关闭会话的操作将失败,并报错“Operation attempted on a closed session”。

已变更

5.0

ResultSummary.ContainUpdates() — 在 4.x 中,如果任何摘要计数器严格为正,该函数将返回 true。现在,它仅在发生以下实体至少一项删除或创建时返回 true:约束、索引、节点、关系、标签、属性。

已变更

5.0

事务超时设置为 0(不再是默认值)现在将禁用服务器端的超时。如果未指定超时,服务器将使用服务器定义的超时。

已变更

5.0

Driver.Session() 已被移除,取而代之的是 DriverWithContext.NewSession()

已移除

5.0

Query.Params() 已被移除,取而代之的是 Query.Parameters()

已移除

5.0

Record.GetByIndex() 已被移除。请直接访问 Record.Values 结构体切片。

已移除

5.0

ResultSummary.Statement() 已被移除,取而代之的是 ResultSummary.Query()。新方法返回一个 Query 而不是 Statement 对象。

已移除

5.0

Session.LastBookmark() 已弃用,取而代之的是 Session.LastBookmarks()。逻辑相似,但新方法返回 neo4j.Bookmarks 而不是 string

已移除

5.0

以前从 neo4j.db 导出的某些类型现在已成为内部类型。
对于 db.AccessModedb.WriteModedb.ReadMode,请使用 neo4j.AccessModeneo4j.AccessModeWriteneo4j.AccessModeRead
对于 db.TxConfig,请使用 neo4j.TransactionConfig
所有其他类型均无替代:db.TxHandledb.StreamHandledb.Commanddb.Connectiondb.RoutingTabledb.DefaultDatabasedb.DatabaseSelector

已移除

5.0

ServerInfo.Version 已被移除。请使用 ServerInfo.AgentServerInfo.ProtocolVersion,或调用 dbms.components Cypher 过程代替。

已移除

5.0

NewDriver() 已弃用,取而代之的是 NewDriverWithContext()。行为相似,只是新函数将 ctx.Context 作为第一个参数。

已弃用

5.0

Session.WriteTransaction()Session.ReadTransaction() 已弃用,取而代之的是 Session.ExecuteWrite()Session.ExecuteRead()。逻辑相同,但参数类型从 Transaction 变更为 ManagedTransaction,并且托管事务不再提供显式事务处理方法(.Commit().Rollback().Close())。

已弃用

5.0

Node.IdRelationship.Id 已弃用,取而代之的是 Node.ElementIdRelationship.ElementId。旧标识符为 Int64,而新 ElementId 为 String。

已弃用

5.0

neo4j.SingleT() 已弃用,取而代之的是 neo4j.SingleTWithContext()。行为相似,只是新函数将 ctx.Context 作为第一个参数。

已弃用

5.0

neo4j.Collect() 已弃用,取而代之的是 neo4j.CollectWithContext()。行为相似,只是新函数将 ctx.Context 作为第一个参数。

已弃用

5.0

neo4j.CollectT() 已弃用,取而代之的是 neo4j.CollectTWithContext()。行为相似,只是新函数将 ctx.Context 作为第一个参数。

已弃用

5.0

neo4j.Session 已弃用,取而代之的是 neo4j.SessionWithContext

已弃用

5.0

neo4j.Driver 已弃用,取而代之的是 neo4j.DriverWithContext

已弃用

5.0

neo4j.Transaction 已弃用,取而代之的是 neo4j.ExplicitTransaction

已弃用

5.0

neo4j.TransactionWork 已弃用,取而代之的是 neo4j.ManagedTransactionWork

已弃用

5.0

neo4j.Result 已弃用,取而代之的是 neo4j.ResultWithContext

已弃用

5.0

Config.RootCAs 已弃用,取而代之的是 Config.TlsConfig

已弃用

5.8

neo4j.Config 已弃用,取而代之的是 config.Config

已弃用

5.8

neo4j.ServerAddress 已弃用,取而代之的是 config.ServerAddress

已弃用

5.8

neo4j.ServerAddressResolver 已弃用,取而代之的是 config.ServerAddressResolver

已弃用

5.17

neo4j.(LogLevel|ERROR|WARNING|INFO|DEBUG) 已弃用,取而代之的是 log.(Level|ERROR|WARNING|INFO|DEBUG)

已弃用

5.17

neo4j.ConsoleLogger() 已弃用,取而代之的是 neo4j.log.ToConsole()。行为相似,只是新函数将 ctx.Context 作为第一个参数。

已弃用

5.17

neo4j.ConsoleBoltLogger() 已弃用,取而代之的是 neo4j.log.BoltToConsole()

已弃用

5.17

类型 neo4j.log.Consoleneo4j.log.Void 已弃用并统一为 neo4j.log.Logger
函数 neo4j.ConsoleLogger()neo4j.Void() 已弃用,取而代之的是 neo4j.log.ToConsole()neo4j.log.ToVoid(),两者均返回 neo4j.log.Logger 对象。

已弃用

5.23

通知相关对象已从全局命名空间 neo4j 移动到 neo4j/notifications — neo4j.(NotificationSeverity|Warning|Information|UnknownSeverity|NotificationCategory|Hint|Unrecognized|Unsupported|Performance|Deprecation|Generic|Security|Topology|UnknownCategory) 已弃用,取而代之的是 notifications.(NotificationSeverity|Warning|Information|UnknownSeverity|NotificationCategory|Hint|Unrecognized|Unsupported|Performance|Deprecation|Generic|Security|Topology|UnknownCategory)

已弃用

© . All rights reserved.