新增功能
在此页面上
了解以下版本中的新功能:
5.7 中的新增功能
Node.js 驱动程序 v5.7 版本包含以下功能:
重要
弃用通知
以下写关注选项已被弃用:
wtimeout
j
fsync
要指定写关注行为,请改用
wtimeoutMS
和journal
选项。要了解有关这些选项的更多信息,请参阅连接选项页面。SSL 选项和其他传输加密选项已弃用。如需了解有关已弃用选项以及应改为使用哪些替代选项的更多信息,请访问本节末尾提供的“v5.7.0 版本亮点”链接,并参阅其中的“已弃用旧版 SSL 选项”部分。
findOneAnd...
复合方法的新选项。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 或更高版本。
5.4 的新增功能
Node.js 驱动程序 5.4 版本的新功能包括:
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 中的新增功能
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)”部分。
重要
在这个驱动程序版本中,已弃用的 collection.count()
方法会在无意中更改,表现出类似于 collection.countDocuments()
的行为。这种行为已在版本 4.4 得到纠正。
4.0 Node.js 驱动程序版本的新功能包括:
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()
方法。请改用命令监控。有关更多信息,请参阅我们的命令监控指南。
详细列表
要查看此版本中引入的破坏性变更 (breaking change)的完整列表,请参阅升级指南中的“破坏性变更 (breaking change)”部分。
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 ) 对话
能够为多个文档事务创建集合和索引
在后台运行集合验证