Docs 菜单
Docs 主页
/ / /
Node.js

新增功能

在此页面上

  • 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 中的新增功能

了解以下版本中的新功能:

Node.js 驱动程序 v5.6 版本包括以下功能:

  • 驱动程序现在支持 Node.js v20。

  • 当您调用 runCursorCommand()方法时,驾驶员可以返回游标作为对服务器命令的响应。 要学习;了解有关此功能的更多信息,请参阅 runCursorCommand API文档。

  • 支持指定时间序列集合创建选项 bucketMaxSpanSecondsbucketRoundingSeconds。要了解有关这些时间序列集合选项的更多信息,请参阅服务器手册中的设置时间序列数据的粒度

要了解有关此版本的更多信息,请参阅 v5.6.0 版本亮点。

5.5 Node.js 驱动程序版本的新功能包括:

  • 现在,驱动程序可以准确检测 AWS 中的函数即服务 (FaaS) 环境;为此,驱动程序仅考虑以以下内容开头的 AWS 环境变量:AWS_Lambda_

  • 如果您想要使用 Queryable Encryption 功能创建加密集合,则必须将 mongodb-client-encryption 升级到版本 2.8.0 或更高版本。

Node.js 驱动程序 5.4 版本的新功能包括:

重要

弃用通知

  • collStats操作已弃用。请改用 $collStats 聚合操作符。

  • 错误地传递给 db.command() 方法的 TypeScript 接口包含某些选项。这些选项已被弃用。

  • ChangeStream.tryNext 方法现在使用架构特定的 TChange 泛型类型,而不是 Document 接口。

要了解更多信息,请参阅 v5.4.0 版本亮点。

Node.js 驱动程序 5.3 版本的新功能包括:

重要

弃用通知

  • forEach()游标方法(允许您迭代访问权限查询和聚合的结果)已弃用。 请改用for await...of语法,如此处的所示

  • addUser() 方法已弃用。请改用 createUser()

  • keepAlivekeepAliveInitialDelay 连接选项已弃用。

  • BulkWriteResult 类中包含重复功能的方法已弃用。有关弃用的方法和首选替代方法的完整列表,请参阅 API 文档

  • 客户端元数据现在包括函数即服务 (FaaS) 环境信息和替代运行时检测。

  • 该驱动程序现在允许包含尾随圆点的 SRV 记录地址。

  • UpdateResult.upsertedId 现在,如果没有更新任何文档,则返回 null。

要了解更多信息,请参阅 v5.3.0 版本亮点。

Node.js 驱动程序 5.2 版本的新功能包括:

  • 该驱动程序现在支持在使用自动 Queryable Encryption 时自动获取 Azure 档案。

要了解更多信息,请参阅 v5.2.0 版本亮点。

5.1 Node.js 驱动程序版本的新功能包括:

  • 驱动程序现在支持将 JavaScript bigint 自动序列化为 BSON.Long。当 useBigInt64 标志作为 true 传递时,驱动程序还支持将从服务器返回的 BSON.Long 值反序列化为 bigint 值。

要了解更多信息,请参阅 v5.1.0 版本亮点。

重要

v5.0 重大更改

  • Node.js 驱动程序 5.0 版本与 Node.js v12 或更早版本不兼容。 如果要使用此版本的驱动程序,则必须使用 Node.js v14.20.1 或更高版本。

  • 此版本删除了对回调的支持,转而支持基于 Promise 的 API。 以下列表为回调用户提供了一些策略以采用此版本:

    • 迁移至基于 Promise 的 API(推荐)

    • 使用基于 promise 的 API 和 util.callbackify

    • 添加 mongodb-legacy 以继续使用 callback

    有关这些策略的更多信息,请参阅 MongoDB Node.js 驱动程序 v 中的更改。5

  • 此版本删除了对Collection.insert()Collection.update()Collection.remove()辅助方法的支持。 以下列表说明了如何替换已删除方法的功能:

    • Collection.insert() 迁移到 insertOne()insertMany()

    • Collection.update() 迁移到 updateOne()updateMany()

    • Collection.remove() 迁移到 deleteOne()deleteMany()

要查看此版本中引入的破坏性变更 (breaking change)的完整列表,请参阅升级指南中的“破坏性变更 (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 Node.js 驱动程序版本的新功能包括:

  • 添加 mongodb-js/saslprep 包作为驱动程序依赖项。

  • 改进了与 Queryable Encryption 功能的兼容性。

要了解更多信息,请参阅 v4.17.0 版本亮点。

Node.js 驱动程序 4.16 版本的新功能包括:

  • 在驱动程序握手元数据中包含函数即服务 (FaaS) 平台信息。

  • 在客户端元数据中识别 Deno 运行时使用情况。

要了解更多信息,请参阅 v4.16.0 版本亮点。

4.15 Node.js 驱动程序版本的新功能包括:

  • 支持适用于服务帐户的 AWS IAM 角色。

要了解更多信息,请参阅 v4.15.0 版本亮点。

重要

从 v4.13 升级到 v4.14

此版本修复了 v4.13 中引入的内存泄漏问题。我们建议升级到 v4.14。

Node.js 驱动程序 4.14 版本的新功能包括:

  • 修复了 v4.13 中引入的内存泄漏问题。

  • 已弃用引用旧版记录器的方法和选项。

4.13 Node.js 驱动程序版本的新功能包括:

  • 驱动程序遇到网络超时错误时会自动取消连接池中正在进行的操作。

  • 在隐式会话中禁用因果一致性,以防与 linearizableavailable 读关注设置发生冲突。

  • 确保该驱动程序在销毁 MessageStream 实例连接时销毁这些实例,从而修复了潜在的内存泄漏问题。

重要

将驱动程序升级到版本 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 版本亮点。

连接到 MongoDB Server 版本 6.0 或更高版本时,驱动程序会在服务器发现和监控事件期间优先应用 electionId 设置,并将 setVersion设置排在后面。在以前的版本中,优先级顺序是相反的。

当您安装可选的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 Node.js 驱动程序版本的新功能包括:

  • 回调 弃用

    • callback 现已弃用,取而代之的是 Promise。下一个主要版本中将删除 callback。Node 驱动程序团队建议尽可能迁移到 Promise:

      • 使用async/await 事务语法。

      • 使用 Node.js 回调实用程序:

        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 Node.js 驱动程序版本的新功能包括:

  • 修复了类型定义中与 writeConcern 选项不一致的问题。

  • 包括最新的 BSON 版本,该版本增加了自动 UUID 支持。请参阅此处的 BSON 发布说明。

要了解更多信息,请参阅 v4.9.0 版本亮点。

重要

从 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 Node.js 驱动程序版本的新功能包括:

  • 当连接到 MongoDB 实例时,MongoClient.connect() 方法现在是可选的

  • 能够使用Zstandard压缩算法压缩消息

  • 添加了对 maxConnecting 连接选项的支持

  • 更改流文档功能可显示更新前后的文档

  • 已添加对与集群到集群复制相关的新更改流字段的支持

  • estimatedDocumentCount() 方法现在使用 $count 数据库命令

  • 改进了在 AWS Lambda 初始化阶段与 MongoDB 的连接

重要

弃用通知

ResumeOptions 接口已弃用。请改用 ChangeStreamCursorOptions 接口。

Node.js 驱动程序 4.6 版本的新功能包括:

  • 改进了 TypeScript 中的 ChangeStreamDocument

  • 根据各服务器的负载情况,实现所选服务器的均匀分布

要了解更多信息,请参阅 v4.6.0 版本亮点。

参见 Github 上的 v4.5.0 版本亮点

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() 方法。

Node.js 驱动程序 4.3 版本的新功能包括:

4.2 Node.js 驱动程序版本的新功能包括:

Node.js 驱动程序 4.1 版本的新功能包括:

重要

在这个驱动程序版本中,已弃用的 collection.count() 方法会在无意中更改,表现出类似于 collection.countDocuments() 的行为。这种行为已在版本 4.4 得到纠正。

4.0 Node.js 驱动程序版本的新功能包括:

  • 我们已将驱动程序迁移到 TypeScript。您现在可以利用提供相应支持的编辑器中的类型提示和智能感知功能来开发 MongoDB 应用程序。在纯 JavaScript 项目中也能获享这些功能的优势。

  • 此版本使用的底层 BSON 库现已迁移至 TypeScript。

  • 内联文档现已采用一致的格式,从而改善了在编辑器中的显示效果。

  • 如果您是社区类型 @types/mongodb 的用户,则在采用我们代码库中的类型时可能会出现问题。由于在 TypeScript 中编写代码库的细节,我们无法在类型上实现一对一匹配。

我们很乐意倾听您对 TypeScript 相关功能的诉求。请在此处的 JIRA 项目上提交想法。

对于版本 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

我们的游标类型不再直接扩展 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 辅助程序进行异步迭代。

通过类型提示,您应该会发现传递给 MongoClient 的选项是枚举且可发现的。我们付出了巨大的努力以处理驱动程序中的所有选项,以便对不兼容的设置发出早期警告,从而使您的应用程序快速启动并在正确的状态下运行。

  • checkServerIdentity 传递给底层 Node API 之前,系统不再对其进行检查。以前,可接受的值为 false 或函数。现在,参数必须是一个函数。指定布尔值将导致出错。

  • 不再需要指定useUnifiedTopologyuseNewUrlParser

此方法不再支持 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

当运行批量写入操作时,您可能会遇到错误,具体取决于您的设置。测试批量操作中是否存在错误时,导入新的类名 MongoBulkWriteError

DB 不再位于EventEmitter中。直接监听来自 MongoClient 实例的事件。

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 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。您可以通过以下方式复制文件查找:使用 startend 选项,创建一个来自 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();
  • 现在,当您连接到 mongod 时,我们在内部仅管理一个 unifiedTopology。要详细了解此版本与之前版本的差异,请访问此处

  • 不再需要指定useUnifiedTopologyuseNewUrlParser

  • 您必须使用新的 directConnection 选项,才能连接到未初始化的副本集节点。

现在添加了对细粒度详细模式的支持。您可以在此处了解每种模式的更多信息。

现已删除 instrument() 方法。请改用命令监控。有关更多信息,请参阅我们的命令监控指南。

要查看此版本中引入的破坏性变更 (breaking change)的完整列表,请参阅升级指南中的“破坏性变更 (breaking change)”部分

Node.js 驱动程序 3.7 版本的新功能包括:

  • 在启用 useUnifiedTopology 选项时,添加了对负载均衡器模式的支持

  • 在启用 useUnifiedTopology 选项时添加了对稳定 API 的支持

3.6 Node.js 驱动程序版本的新功能包括:

  • 添加了对使用 Amazon Web Services (AWS) 身份和访问管理 (IAM) 凭证的 MONGODB-AWS 身份验证机制的支持

  • 对于需要太多内存才能在 RAM 中执行的排序,find() 方法支持 allowDiskUse()

  • update()replaceOne() 方法支持索引提示

  • 缩短了拓扑结构变更和事件故障转移的恢复时间

  • 针对默认 writeConcern 验证测试的改进

  • 身份验证需要减少往返服务器的次数,从而加快连接设置

  • 更短的 Salted 挑战响应身份验证机制 (SCRAM) 对话

  • 能够为多个文档事务创建集合和索引

  • 在后台运行集合验证

后退

快速参考