新增功能
在此页面上
- 6.8 中的新功能
- 6.7 中的新功能
- 6.6 中的新功能
- 6.5 中的新功能
- 6.4 中的新功能
- 6.3 中的新增功能
- 6.2 中的新增功能
- 6.1 中的新增功能
- 6.0 中的新增功能
- 5.9 的新增功能
- 5.8 的新增功能
- 5.7 中的新增功能
- 5.6 中的新增功能
- 5.5 中的新增功能
- 5.4 的新增功能
- 5.3 中的新增功能
- 5.2 中的新增功能
- 5.1 中的新增功能
- 5.0 中的新增功能
- 4.17 中的新增功能
- 4.16 的新增功能
- 4.15 中的新增功能
- 4.14 中的新增功能
- 4.13 中的新增功能
- 4.12 中的新增功能
- 4.11 中的新增功能
- 4.10 中的新增功能
- 4.9 的新增功能
- 4.8 中的新增功能
- 4.7 中的新增功能
- 4.6 的新增功能
- 4.5 中的新增功能
- 4.4 中的新增功能
- 4.3 的新增功能
- 4.2 的新增功能
- 4.1 中的新增功能
- 4.0 中的新增功能
- 3.7 中的新增功能
- 3.6 中的新增功能
了解以下版本中的新功能:
6.8 中的新功能
Node.js 驱动程序 v6.8 版本包括以下功能:
修复本地 KMS 提供程序在运行时接受
BSON Binary
实例,但 TypeScript 编译器仅允许Buffer
和string
类型的值的错误。ReadConcernMajorityNotAvailableYet
错误现在是可重试读取错误。现在,您可以将名称与 KMS 提供商相关联,并为其提供多个密钥。此功能需要
mongodb-client-encryption
v 6 。 0 。 1或更高版本。如果您的应用程序使用自动 KMS 提供程序刷新功能,则无法使用命名 KMS 提供程序。以下代码示例展示了如何使用多个 AWS 密钥配置
ClientEncryption
对象:const clientEncryption = new ClientEncryption(keyVaultClient, { 'aws:key1': { accessKeyId: ..., secretAccessKey: ... }, 'aws:key2': { accessKeyId: ..., secretAccessKey: ... }, clientEncryption.createDataKey('aws:key-1', { ... }); 创建 KMIP 数据密钥时,现在可以指定
delegated
选项。如果此选项设置为true
,则 KMIP 提供程序在本地执行数据密钥的加密和解密,确保加密密钥永远不会离开 KMIP 服务器。该特征需要mongodb-client-encryption
v 6 。 0 。 1或更高版本。以下代码示例展示了如何指定此选项:
clientEncryption.createDataKey('kmip', { masterKey: { delegated: true } } ); 驱动程序现在会在游标遍历 BSON 响应时对其进行解码,而不是在收到整个 BSON 响应时对其进行解码。
包的 Github
mongodb
版本现在包含mongodb-X.Y.Z.tgz.sig
NPM 包的分离签名文件 。此更改适用于驱动程序5 .x 和6 .x 版本的每个主要版本和补丁版本。要验证包签名,请按照 README.md 的“发布完整性”部分中的说明进行操作。 驱动程序的 GitHub 存储库中的文件。
要了解有关此版本的更多信息,请参阅 v6.8.0 版本说明。
6.7 中的新功能
Node.js 驱动程序 v6.7 版本包括以下功能:
添加了连接到 MongoDB Server v 7.0 及更高版本时对
MONGODB-OIDC
身份验证机制的支持。该驱动程序支持使用 Azure 机器身份验证、GCP 机器身份验证、回调身份验证和人机交互回调身份验证分面(Facet)进行身份验证。修复了将
useBigInt64
标志设置为true
会导致内部compareTopologyVersion
函数生成错误的问题。
要了解有关此版本的更多信息,请参阅 v6.7.0 版本说明。
6.6 中的新功能
Node.js 驱动程序 v6.6 版本包括以下功能:
升级为使用 BSON 6.7.0。有关新 BSON 功能的详细信息,请参阅 BSON 6.5.0、BSON 6.6.0 和 BSON 6.7.0. 的发布说明
将
addStage()
方法添加到流体聚合 API 中。您可以使用此方法单独添加聚合管道阶段,如以下示例中所示:const documents = await users.aggregate().addStage({ $project: { name: true } }).toArray(); 为
MongoMissingDependencyError
类添加cause
和dependencyName
字段。您可以使用这些字段以编程方式确定包是否丢失或包未加载的原因。将
minRoundTripTime
属性添加到ServerDescription
类。该属性包含最近 10 次心跳的最短往返时间。将
toJSON()
方法添加到TopologyDescription
类。尽管您可以使用此方法将TopologyDescription
对象字符串化为 JSON,但我们建议改用 Node 的util.inspect()
方法,因为它可以正确处理 JavaScript 和驱动程序中使用的所有类型。为 Typescript 中的
Collection.indexExists()
、Collection.indexes()
和Collection.indexInformation()
方法添加游标选项支持。从
Collection.listSearchIndexes()
方法中删除对readConcern
和writeConcern
选项的支持。listSearchIndexes()
是特定于 Atlas 的方法,且 Atlas 搜索索引不支持这些选项。将
ServerDescription.roundTripTime
属性重新定义为移动平均值。以前,它是最近观察到的心跳持续时间和之前持续时间的加权平均值。您可以在创建索引时指定搜索索引的类型,如下例所示:
const indexName = await collection.createSearchIndex({ name: 'my-vector-search-index', type: 'vectorSearch', definition: { mappings: { dynamic: false } } }); 在将
UpdateFilter.$currentDate
属性传递给具有有限模式的集合上的复合方法(如findOneAndUpdate()
)时,该属性不再引发错误。仅当您提供除
primary
以外的ReadPreferenceMode
,然后尝试执行涉及读取操作的命令时,驱动程序才会抛出MongoTransactionError
。TopologyDescription.error
属性的数据类型为MongoError
。Collection.indexExists()
方法不再支持full
选项。在 TypeScript 中,
Collection.indexInformation()
、Collection.indexes()
和Db.indexInformation()
方法的返回类型为IndexDescriptionCompact | IndexDescriptionInfo[]
。检索 AWS KMS(密钥管理系统)凭证时,驱动程序在收到包含过期时间戳的访问密钥时不再抛出错误。
在 TypeScript 中,
ClusterTime
接口不再定义signature
字段为必需的字段。
要了解有关此版本的更多信息,请参阅 GitHub 上的 v6.6.0 版本亮点。
6.5 中的新功能
Node.js 驱动程序 v6.5 版本包括以下功能:
更新批量写入操作以使用
pkFactory
类生成文档 ID。
警告
如果您之前指定了一个 pkFactory
实例来处理批量写入,那么文档中使用批量写入插入的 _id
字段可能会与此版本中的行为不一致。
修复了在驱动程序连接到副本集中的从节点时,通过读取操作发送到
primaryPreferred
的读取偏好。修复了在套接字操作的承诺创建中引起的内存泄漏。
通过并行查询
SRV
和TXT
记录,减少连接到 DNS 种子列表时的首次连接延迟。在 Kubernetes 中运行客户端时,在握手文档的
client.env.container
字段中添加对容器元数据的跟踪。将服务器返回的原始错误文档添加到
MongoServerError
文档的errorResponse
字段。弃用驱动程序未使用的
CloseOptions
接口。
要了解有关此版本的更多信息,请参阅 GitHub 上的 v6.5.0 版本亮点。
6.4 中的新功能
Node.js 驱动程序 v6.4 版本包括以下功能:
当存在多个
mongos
实例时,读写重试尝试将使用不同的服务器。在客户端级别缓存 AWS 凭据,避免每次身份验证时都重新获取。
升级为使用 BSON 6.4.0。有关 BSON 新功能的详细信息,请参阅 BSON 6.3.0 和 BSON 6.4.0 的发布说明。
重试导致
ExceededTimeLimit
错误的读操作。修复了
saslContinue
命令的 base64 填充,以允许进行 mongosh 身份验证。类型
countDocuments
使用Filter<Schema>
而不是Document
,这支持自动完成并有助于防止下游的键入问题。修复了
bulkWrite
命令的$addToSet
选项中的类型错误。驱动程序会跳过您从Document
或any
扩展类型或使用任何类型属性的$addToSet
验证。修复
ServerHeartbeatSucceeded
和ServerHeartbeatFailed
事件检测信号持续时间,使其不包括创建套接字的时间。适当地从游标转换流中发出错误,而不是消除错误。
在提供用户名和密码时,使 AWS 会话令牌成为可选,并允许 AWS SDK 处理身份验证请求。
要了解有关此版本的更多信息,请参阅 GitHub 上的 v6.4.0 版本亮点。
6.3 中的新增功能
Node.js 驱动程序 v6.3 版本包含以下功能:
添加
serverMonitoringMode
客户端选项,以控制拓扑中节点之间的监控连接行为。此选项的值可为auto
(默认值)、poll
或stream
。要了解更多信息,请参阅连接选项指南中该选项的相应条目。您可以在
serverMonitoringMode
实例中设置MongoClientOptions
选项,也可以将其设置为连接字符串选项。以下示例展示了如何创建一个客户端,并将选项设置为stream
:new MongoClient('<connection string>', { serverMonitoringMode: 'stream' }); 修复了设置
serverApi
客户端选项时的连接泄漏问题。弃用
contentType
和aliases
GridFS 选项。要存储文件的内容类型和别名,请将contentType
和aliases
字段添加到metadata
文档中。
要了解有关此版本的更多信息,请参阅 v6.3.0 版本亮点。
6.2 中的新增功能
Node.js 驱动程序 v6.2 版本包括以下功能:
将
bson
包版本更新到 6.2.0 以包含类型的颜色可视化效果,如下图所示:要了解更多信息,请参阅 bson v6.2.0 发布说明。
确保批写入错误类型的
result.insertedIds
属性包含已成功插入文档的_id
值。在之前的版本中,当批写入操作拒绝插入操作时,result.insertedIds
属性包含所有已尝试插入的_id
值。关闭在时间序列集合上运行
findOne()
方法时创建的隐式会话,无论操作的结果如何。允许创建名称以
.
字符开头或结尾的集合。此更改使驱动程序的数据库和集合名称校验行为与服务器的相应行为保持一致。
要了解有关此版本的更多信息,请参阅 v6.2.0 版本亮点。
6.1 中的新增功能
Node.js 驱动程序 v6.1 版本包含以下功能:
将
bson
软件包版本更新至 6.1.0 以公开Decimal128.fromStringWithRounding()
方法。要了解更多信息,请参阅 v6.1.0 bson 发布说明。。在使用
MONGODB-AWS
身份验证机制进行身份验证时,检测区域设置的环境变量。要指示该驱动程序使用区域选项,您必须同时设置以下两个环境变量:AWS_STS_REGIONAL_ENDPOINTS
AWS_REGION
修复了因递归调用
ChangeStream
类型的next()
方法而导致的内存泄漏问题。
要了解有关此版本的更多信息,请参阅 v6.1.0 版本亮点。
6.0 中的新增功能
警告
v6.0 的重大更改
此驱动程序版本引入了破坏性变更 (breaking change)。有关这些变更的列表,请参阅升级指南中的“版本 6.0 破坏性变更 (breaking change)”部分。
Node.js 驱动程序 v6.0 版本包括以下功能:
重要
弃用通知
MongoClientOptions
类型中所有以 ssl
为前缀的选项均已弃用。此外,tlsCertificateFile
选项已弃用。
取而代之的是,您应将证书存储在 SecureContext
对象中,或在 MongoClientOptions
实例中设置以 tls
为前缀的选项。要了解更多信息,请参阅在连接上启用 TLS。
删除了对
addUser()
辅助命令的支持。请改用createUser MongoDB Shell 命令。移除了对
collStats
操作的支持。请改用 $collStats 聚合操作符。ConnectionPoolCreatedEvent
类型的options
字段只包含以下字段,这些字段是非默认池选项:maxConnecting
maxPoolSize
minPoolSize
maxIdleTimeMS
waitQueueTimeoutMS
在您调用
MongoClient.connect()
方法而不是创建MongoClient
实例时,该驱动程序异步读取在tlsCAFile
和tlsCertificateKeyFile
连接选项中设置的文件。删除了
keepAlive
和keepAliveInitialDelay
连接选项。keepAlive
的值永久设置为true
,而keepAliveInitialDelay
的值设置为 300000 毫秒(300 秒)。要了解如何在系统级别设置 keepalive 设置,请参阅服务器手册中“TCP keepalive 时间是否影响 MongoDB 部署?”的常见问题解答条目。
删除了
Db.command()
方法的以下选项:willRetryWrite
omitReadPreference
writeConcern
explain
readConcern
collation
maxTimeMS
comment
retryWrites
dbName
authdb
noResponse
尽管您无法将这些选项传递给
Db.command()
方法,但您仍然可以在命令文档中设置这些选项。要了解更多信息,请参阅运行命令指南中的命令选项部分。
要了解有关此版本的更多信息,请参阅 v6.0.0 版本亮点。
5.9 的新增功能
重要
从 v5.8 升级到 v5.9
此版本修复了 v5.7 中引入的内存泄漏问题。我们建议升级到 v5.9。
Node.js 驱动程序 v5.9 版本包含以下功能:
修复了 v5.7 中引入的内存泄漏问题。
现在,当
Decimal128
构造函数和fromString()
方法检测到精度丢失超过 34 位有效数字时,它们会抛出异常。Decimal128
类公开了一个新的fromStringWithRounding()
静态方法,该方法使用以前版本的驱动程序的舍入行为。如需更多信息,请参阅 GitHub 上js-bson 包 v5.5 发布说明。在 AWS SDK 中调用
fromNodeProviderChain()
方法时,添加了对检测AWS_STS_REGIONAL_ENDPOINTS
和AWS_REGION
环境变量以及设置相应选项的支持。
要了解有关此版本的更多信息,请参阅 v5.9.0 版本亮点。
5.8 的新增功能
重要
从 v5.8 升级到 v5.9
此版本修复了 v5.7 中引入的内存泄漏问题。我们建议升级到 v5.9。
Node.js 驱动程序 v5.8 版本包含以下功能:
重要
弃用通知
AutoEncrypter
接口已弃用。
支持 Kerberos 版本 1.x 和 2.x。
在您设置
tlsCertificateKeyFile
属性时,不会针对tlsCertificateFile
属性发出弃用错误。删除了
ConnectionPoolCreatedEvent
类型中的档案可用性。您仍然可以通过MongoOptions
实例的credentials
属性访问档案。将
@aws-sdk/credential-providers
版本降低至 3.188.0 并将zstd
版本降低至 ^1.0.0。
要了解有关此版本的更多信息,请参阅 v5.8.0 版本亮点。
5.7 中的新增功能
Node.js 驱动程序 v5.7 版本包含以下功能:
重要
弃用通知
以下写关注选项已被弃用:
wtimeout
j
fsync
要指定写关注行为,请改用
wtimeoutMS
和journal
选项。要了解有关这些选项的更多信息,请参阅连接选项页面。SSL 选项和其他传输加密选项已弃用。如需了解有关已弃用选项以及应改为使用哪些替代选项的更多信息,请访问本节末尾提供的“v5.7.0 版本亮点”链接,并参阅其中的“已弃用旧版 SSL 选项”部分。
复合操作方法的新选项。
includeResultMetaData
选项允许您指定是否包含有关操作结果的信息。有关更多信息,请参阅“复合操作”指南的内置方法部分。支持 change stream 拆分事件,可支持处理超过 16MB 最大 BSON 大小限制的 change stream 文档。
用于在应用程序内管理搜索索引的 API。要了解更多信息,请参阅搜索索引。
要了解有关此版本的更多信息,请参阅 v5.7.0 版本亮点。
5.6 中的新增功能
Node.js 驱动程序 v5.6 版本包括以下功能:
驱动程序现在支持 Node.js v20。
当调用
runCursorCommand()
方法时,驱动程序可以返回游标作为对服务器命令的响应。要了解有关此功能的更多信息,请参阅 runCursorCommand API 文档。支持指定时间序列集合创建选项 bucketMaxSpanSeconds 和 bucketRoundingSeconds 。要了解有关这些时间序列集合选项的更多信息,请参阅服务器手册中的“ 设置时间序列数据的粒度” 。
要了解有关此版本的更多信息,请参阅 v5.6.0 版本亮点。
5.5 中的新增功能
5.5 Node.js 驱动程序版本的新功能包括:
现在,驱动程序可以准确检测 AWS 中的函数即服务 (FaaS) 环境;为此,驱动程序仅考虑以以下内容开头的 AWS 环境变量:
AWS_Lambda_
。如果您想要使用 Queryable Encryption 功能创建加密集合,则必须将
mongodb-client-encryption
升级到版本 2.8.0 或更高版本。
要了解有关此版本的更多信息,请参阅 v5.5.0 版本亮点。
5.4 的新增功能
Node.js 驱动程序 5.4 版本的新功能包括:
重要
弃用通知
collStats
操作已弃用。请改用$collStats聚合操作符。错误地传递给
db.command()
方法的 TypeScript 接口包含某些选项。这些选项已被弃用。
ChangeStream.tryNext
方法现在使用架构特定的TChange
泛型类型,而不是Document
接口。
要了解更多信息,请参阅 v5.4.0 版本亮点。
5.3 中的新增功能
Node.js 驱动程序 5.3 版本的新功能包括:
重要
客户端元数据现在包括函数即服务 (FaaS) 环境信息和替代运行时检测。
该驱动程序现在允许包含尾随圆点的 SRV 记录地址。
UpdateResult.upsertedId
现在,如果没有更新任何文档,则返回 null。
要了解更多信息,请参阅 v5.3.0 版本亮点。
5.2 中的新增功能
Node.js 驱动程序 5.2 版本的新功能包括:
该驱动程序现在支持在使用自动 Queryable Encryption 时自动获取 Azure 档案。
要了解更多信息,请参阅 v5.2.0 版本亮点。
5.1 中的新增功能
5.1 Node.js 驱动程序版本的新功能包括:
驱动程序现在支持将 JavaScript
bigint
自动序列化为BSON.Long
。当useBigInt64
标志作为 true 传递时,驱动程序还支持将从服务器返回的BSON.Long
值反序列化为bigint
值。
要了解更多信息,请参阅 v5.1.0 版本亮点。
5.0 中的新增功能
警告
v5.0 重大更改
此驱动程序版本引入了破坏性变更 (breaking change)。有关这些更改的列表,请参阅升级指南中的版本 5.0 破坏性变更 (breaking change)。
5.0 Node.js 驱动程序版本的新功能包括:
默认情况下,除非明确使用
StrictFilter
类型注解,否则驱动程序不再检查点符号引用的类型。要了解有关此更改的更多信息,请参阅 Typescript 基础知识页面。注意
此更改仅适用于 Typescript,并且不会影响运行时的查询或操作。
可选择安装
@aws-sdk/credential-providers
作为对等依赖项。默认情况下,驱动程序不再包含 AWS SDK 模块。使用以下
npm
命令安装 SDK:npm install --save "@aws-sdk/credential-providers@^3.201.0" 如果您安装该 SDK,在安装的 SDK 版本与驱动程序不兼容时,
npm
将向您发送通知。在成功安装依赖项后,驱动程序使用 AWS SDK 本身管理环境中的凭证。
4.17 中的新增功能
4.17 Node.js 驱动程序版本的新功能包括:
添加
mongodb-js/saslprep
包作为驱动程序依赖项。改进了与 Queryable Encryption 功能的兼容性。
要了解更多信息,请参阅 v4.17.0 版本亮点。
4.16 的新增功能
Node.js 驱动程序 4.16 版本的新功能包括:
在驱动程序握手元数据中包含函数即服务 (FaaS) 平台信息。
在客户端元数据中识别 Deno 运行时使用情况。
要了解更多信息,请参阅 v4.16.0 版本亮点。
4.15 中的新增功能
4.15 Node.js 驱动程序版本的新功能包括:
支持适用于服务帐户的 AWS IAM 角色。
要了解更多信息,请参阅 v4.15.0 版本亮点。
4.14 中的新增功能
重要
从 v4.13 升级到 v4.14
此版本修复了 v4.13 中引入的内存泄漏问题。我们建议升级到 v4.14。
Node.js 驱动程序 4.14 版本的新功能包括:
修复了 v4.13 中引入的内存泄漏问题。
已弃用引用旧版记录器的方法和选项。
4.13 中的新增功能
4.13 Node.js 驱动程序版本的新功能包括:
驱动程序遇到网络超时错误时会自动取消连接池中正在进行的操作。
在隐式会话中禁用因果一致性,以防与
linearizable
和available
读关注设置发生冲突。确保该驱动程序在销毁
MessageStream
实例连接时销毁这些实例,从而修复了潜在的内存泄漏问题。
4.12 中的新增功能
重要
将驱动程序升级到版本 4.12.1
4.12.1 Node.js 驱动程序修复了监控逻辑中可能导致进程崩溃的回归问题。
Node.js 驱动程序 4.12 版本的新功能包括:
将
ChangeStream
类重新定义为异步可迭代对象。您可以将ChangeStream
实例用于任何需要AsyncIterator
的上下文。值得注意的是,现在可以在 Javascript
for-await
循环中使用变更流:const changeStream = myColl.watch(); for await (const change of changeStream) { console.log("Received change: ", change); }
修复了驱动程序跳过监控事件时的服务器监控问题。在此版本中中,驱动程序在处理监控事件时始终会更新其拓扑视图。
修改了驱动程序内部使用的数据结构,从而提高了缓冲性能。
要了解更多信息,请参阅 v4.12.0 版本亮点。
4.11 中的新增功能
监控的优先级顺序
连接到 MongoDB Server 版本 6.0 或更高版本时,驱动程序会在服务器发现和监控事件期间优先应用 electionId
设置,并将 setVersion
设置排在后面。在以前的版本中,优先级顺序是相反的。
对 AWS 身份验证的更改
当您安装可选的aws-sdk/credential-providers
依赖项时,驱动程序使用 AWS SDK 从环境中检索 AWS 档案。
要了解有关此行为的更多信息,请参阅身份验证机制指南中的 MONGODB-AWS 部分。
互递归模式类型校验
此版本增加了对相互递归集合模式类型的支持。在此版本中,驱动程序还为深度高达 8 的点符号查询提供类型安全。在深度大于或等于 8 时,Typescript 可成功编译代码,但不提供类型安全。递归类型的深度限制是 TypeScript 的当前限制。
例子
假设我们有一个类型为 Collection<Author>
的集合,其中包含以下互递归类型:
interface Author { name: string; bestBook: Book; } interface Book { title: string; author: Author; }
TypeScript 执行深度最多 8 层的类型检查。以下代码会导致 TypeScript 编译错误,因为 name
属性值必须是 string
类型:
myColl.findOne({ 'bestBook.author.bestBook.title': 25 });
在深度大于或等于 8 时,TypeScript 编译您的代码,但不再对其进行类型检查。例如,以下代码将 number
分配给 string
属性,但不会导致编译错误,因为引用的属性的深度为 10:
myColl.findOne({ 'bestBook.author.bestBook.author.bestBook.author.bestBook.author.bestBook.author.name': 25 });
要了解更多信息,请参阅 v4.11.0 版本亮点。
4.10 中的新增功能
4.10 Node.js 驱动程序版本的新功能包括:
Callback 弃用
callback 现已弃用,取而代之的是 Promise。下一个主要版本中将删除 callback。Node 驱动程序团队建议尽可能迁移到 Promise:
使用
async/await
事务语法。使用 Node.js callbackify 实用程序:
require('util').callbackify(() => myColl.findOne())(callback) 使用 then 语法:
myColl.findOne().then(res => callback(null, res), err => callback(err))
如果无法在大型代码库中迁移到 Promises,可以使用带有可选回调支持的旧版 Node.js 驱动程序。
要了解更多信息,请参阅 v4.10.0 版本亮点。
4.9 的新增功能
4.9 Node.js 驱动程序版本的新功能包括:
修复了类型定义中与
writeConcern
选项不一致的问题。包括最新的 BSON 版本,该版本增加了自动 UUID 支持。请参阅此处的 BSON 发布说明。
要了解更多信息,请参阅 v4.9.0 版本亮点。
4.8 中的新增功能
重要
从 v4.8.0 升级到 v4.8.1
版本 4.8.1 修复了 v4.8.0 中引入的类型回归问题。升级到 v4.8.1 后,您可以在使用 $set
或 $setOnInsert
操作符执行更新时指定 _id
值和子文档。
4.8 Node.js 驱动程序版本的新功能包括:
为更新筛选器中的嵌套键添加了自动完成和类型安全
client.startSession()
现在可以在连接到 MongoDB 之前调用estimatedDocumentCount()
方法现在可以接受注释
要了解更多信息,请参阅 v4.8.0 版本亮点。
4.7 中的新增功能
4.7 Node.js 驱动程序版本的新功能包括:
当连接到 MongoDB 实例时,
MongoClient.connect()
方法现在是可选的能够使用
Zstandard
压缩算法压缩消息添加了对
maxConnecting
连接选项的支持更改流文档功能可显示更新前后的文档
已添加对与集群到集群复制相关的新更改流字段的支持
estimatedDocumentCount()
方法现在使用$count
数据库命令改进了在 AWS Lambda 初始化阶段与 MongoDB 的连接
重要
弃用通知
ResumeOptions
接口已弃用。请改用 ChangeStreamCursorOptions
接口。
4.6 的新增功能
Node.js 驱动程序 4.6 版本的新功能包括:
改进了 TypeScript 中的
ChangeStreamDocument
。根据各服务器的负载情况,实现所选服务器的均匀分布
要了解更多信息,请参阅 v4.6.0 版本亮点。
4.5 中的新增功能
参见 Github 上的 v4.5.0 版本亮点。
4.4 中的新增功能
Node.js 驱动程序 4.4 版本的新功能包括:
使用 CSFLE 时的 KMIP 提供程序支持。
使用 CSFLE 时支持 TLS。
在使用 GSSAPI 时,主机名规范化现在接受将“none”、“forward”和“forwardAndReverse”作为
authMechanismProperties
。在驱动程序 4.0.0 版本中,已弃用的
collection.count()
方法会在无意中更改为类似collection.countDocuments()
的行为。在此版本中,更新了collection.count()
方法以匹配旧行为:如果提供了查询,则
collection.count()
的行为与collection.countDocuments()
相同,并执行集合扫描。如果未提供查询,则
collection.count()
的行为与collection.estimatedDocumentCount()
相同,并依赖于集合元数据。
重要
弃用通知
cursor.count()
方法已弃用,并将在下一个主要版本中与collection.count()
一起被移除。请改用collection.estimatedDocumentCount()
或collection.countDocuments()
方法。
4.3 的新增功能
Node.js 驱动程序 4.3 版本的新功能包括:
SOCKS5 支持
禁用 UTF-8 验证的选项
嵌套文档的类型推断
4.2 的新增功能
4.2 Node.js 驱动程序版本的新功能包括:
srvMaxHosts
和srvServiceName
DNS 种子列表连接选项
4.1 中的新增功能
Node.js 驱动程序 4.1 版本的新功能包括:
新增对所有集群类型(包括 beta无服务器平台)的负载均衡连接支持。
添加了对
advanceClusterTime()
方法的支持,以确定ClientSession
是否应更新其集群时间。
4.0 中的新增功能
警告
v4.0 中的重大变化
此驱动程序版本引入了破坏性变更 (breaking change)。有关这些变更的列表,请参阅升级指南中的“版本 4.0 破坏性变更 (breaking change)”部分。
4.0 Node.js 驱动程序版本的新功能包括:
重要
在这个驱动程序版本中,已弃用的 collection.count()
方法会在无意中更改,表现出类似于 collection.countDocuments()
的行为。这种行为已在版本 4.4 得到纠正。
Typescript
我们已将驱动程序迁移到 TypeScript。您现在可以利用提供相应支持的编辑器中的类型提示和智能感知功能来开发 MongoDB 应用程序。在纯 JavaScript 项目中也能获享这些功能的优势。
此版本使用的底层 BSON 库现已迁移至 TypeScript。
内联文档现已采用一致的格式,从而改善了在编辑器中的显示效果。
如果您是社区类型
@types/mongodb
的用户,则在采用我们代码库中的类型时可能会出现问题。由于在 TypeScript 中编写代码库的细节,我们无法在类型上实现一对一匹配。
我们很乐意倾听您对 TypeScript 相关功能的诉求。请在此处的 JIRA 项目上提交想法。
主要变化
Node.js 版本
对于版本 4 的驱动程序,Node.js 现在支持的最低版本是 v12.9 或更高版本。对我们 3.x 分支的支持将持续到 2022 年年中,以便用户有时间进行升级。
注意
3.x 最低支持 Node.js v4。
游标改进
我们的 Cursor 实现现已更新,明确了在执行操作之前和之后可能发生的情况。
例子
const fc = myColl.find({a: 2.3}).skip(1) for await (const doc of fc) { console.log(doc) fc.limit(1) // incorrect usage, cursor already executing }
之前,如果在游标执行开始后应用设置,则游标处理错误的方式存在不一致的情况。现在,当尝试在无效状态下应用操作时,游标将抛出类似以下的错误:
MongoError: Cursor is already initialized
受影响的类:
AbstractCursor
FindCursor
AggregationCursor
ChangeStreamCursor
(这是一个底层的游标,适用于ChangeStream
)ListCollectionsCursor
游标流 API
我们的游标类型不再直接扩展 Readable
。必须调用 cursor.stream()
以将其转换为流。
例子
const cursor = myColl.find({}); const stream = cursor.stream(); stream.on("data", data => console.log); stream.on("error", () => client.close());
使用 hasNext()
和next()
进行手动迭代。使用for await of
事务语法或任何Promise
辅助程序进行异步迭代。
MongoClientOptions
接口
通过类型提示,您应该会发现传递给 MongoClient
的选项是枚举且可发现的。我们付出了巨大的努力以处理驱动程序中的所有选项,以便对不兼容的设置发出早期警告,从而使您的应用程序快速启动并在正确的状态下运行。
checkServerIdentity
传递给底层 Node API 之前,系统不再对其进行检查。以前,可接受的值为false
或函数。现在,参数必须是一个函数。指定布尔值将导致出错。不再需要指定
useUnifiedTopology
或useNewUrlParser
。
createCollection()
此方法不再支持 strict
选项,该选项会在集合不存在的情况下返回错误。要断言集合是否存在,请改用 listCollections()
方法。
例子
const collections = (await db.listCollections({}, { nameOnly: true }) .toArray()).map( ({name}) => name ); if (!collections.includes(myNewCollectionName)) { throw new Error(`${myNewCollectionName} doesn't exist`); }
BulkWriteError
→ MongoBulkWriteError
BulkWriteError
现已重命名为MongoBulkWriteError
。
当运行批量写入操作时,您可能会遇到错误,具体取决于您的设置。测试批量操作中是否存在错误时,导入新的类名 MongoBulkWriteError
。
DB
DB
不再位于EventEmitter
中。直接监听来自 MongoClient
实例的事件。
Collection.group()
Collection.group()
助手,自 MongoDB 3.4 起弃用,现已删除。请改用聚合管道 $group 操作符。
身份验证
gssapiServiceName
现已删除。 使用 authMechanismProperties.SERVICE_NAME 在 URI 中或作为MongoClientOptions
的选项。例子
?authMechanismProperties.SERVICE_NAME // or new MongoClient(url, { SERVICE_NAME: "alternateServiceName" }) 仅支持在 URI 中将用户名和密码指定为选项,或者将此项设置作为以下对象上的选项:
MongoClientOptions
。例子
new MongoClient("mongodb://username:password@<host><port>") // or new MongoClient(url, { auth: { username: "<>", password: "<>" } })
GridStore
删除
GridStore API(已在 3.x 中弃用)现已替换为 GridFSBucket
。有关 GridFS
的更多信息,请参阅 mongodb 手册。
下面是一些表示等效操作的代码片段。
构建
例子
// old way const gs = new GridStore(db, filename, mode[, options]) // new way const bucket = new GridFSBucket(client.db('test')[,options])
文件查找
GridFSBucket 使用 Node.js Stream API。您可以通过以下方式复制文件查找:使用 start
和 end
选项,创建一个来自 GridFSBucket
的下载流。
例子
bucket.openDownloadStreamByName(filename, { start: 0, end: 100 })
文件上传和下载
例子
await client.connect(); const filename = 'test.txt'; // whatever local file name you want const db = client.db(); const bucket = new GridFSBucket(db); fs.createReadStream(filename) .pipe(bucket.openUploadStream(filename)) .on('error', console.error) .on('finish', () => { console.log('done writing to db!'); bucket .find() .toArray() .then(files => { console.log(files); bucket .openDownloadStreamByName(filename) .pipe(fs.createWriteStream('downloaded_' + filename)) .on('error', console.error) .on('finish', () => { console.log('done downloading!'); client.close(); }); }); });
注意
GridFSBucket
不需要关闭操作,这不同于 GridStore
。
文件删除
例子
// old way GridStore.unlink(db, name, callback); // new way bucket.delete(file_id);
查找文件元数据
对于过去可在 GridStore
实例上访问的文件元数据,现在可以通过查询存储桶来查找到这些文件元数据。
例子
const fileMetaDataList: GridFSFile[] = bucket.find({}).toArray();
统一拓扑结构
解释
现在添加了对细粒度详细模式的支持。您可以在此处了解每种模式的更多信息。
命令监控
现已删除 instrument()
方法。请改用命令监控。有关更多信息,请参阅我们的命令监控指南。
3.7 中的新增功能
Node.js 驱动程序 3.7 版本的新功能包括:
在启用
useUnifiedTopology
选项时,添加了对负载均衡器模式的支持在启用
useUnifiedTopology
选项时添加了对稳定 API 的支持
3.6 中的新增功能
3.6 Node.js 驱动程序版本的新功能包括:
添加了对使用 Amazon Web Services (AWS) 身份和访问管理 (IAM) 凭证的 MONGODB-AWS 身份验证机制的支持
对于需要太多内存才能在 RAM 中执行的排序,find() 方法支持
allowDiskUse()
update() 和 replaceOne() 方法支持索引提示
缩短了拓扑结构变更和事件故障转移的恢复时间
针对默认 writeConcern 验证测试的改进
身份验证需要减少往返服务器的次数,从而加快连接设置
较短的 Salted 挑战响应身份验证机制 ( SCRAM ) 对话
能够为多个文档事务创建集合和索引
在后台运行集合验证