What's New新增功能

Learn what's new in:了解以下方面的新功能:

New features of the 4.1 Node.js driver release include:4.1 Node.js驱动程序版本的新功能包括:

  • Added load balanced connection support for all cluster types including the beta Serverless platform.添加了对所有群集类型(包括beta无服务器平台)的负载平衡连接支持。
  • Added support for the advanceClusterTime() method to determine if the ClientSession should update its cluster time.增加了对advanceClusterTime()方法的支持,以确定ClientSession是否应更新其群集时间。

New features of the 4.0 Node.js driver release include:4.0 Node.js驱动程序版本的新功能包括:

  • We've migrated the driver to TypeScript. 我们已将驱动程序迁移到TypeScript。You can now harness the type hinting and intellisense features in editors that support it to develop your MongoDB applications. 现在,您可以利用支持它的编辑器中的类型提示和intellisense功能来开发MongoDB应用程序。Enjoy the benefits of this work in pure JavaScript projects as well.在纯JavaScript项目中也可以享受这项工作的好处。
  • The underlying BSON library used by this version is now migrated to TypeScript.此版本使用的基础BSON库现在迁移到TypeScript。
  • Inline documentation is now consistenly formatted to improve display in editors.内联文档现在已一致性格式化,以改进编辑器中的显示。
  • If you are a user of the community types @types/mongodb, there will likely be issues adopting the types from our codebase. We could not achieve a one to one match in types due to the details of writing the codebase in TypeScript.如果您是社区类型@types/mongodb的用户,那么采用我们的代码库中的类型可能会出现问题。由于在TypeScript中编写代码库的细节,我们无法在类型中实现一对一的匹配。

We'd love to hear your TypeScript related feature requests. 我们很想听听您对TypeScript相关功能的要求。Please submit ideas on our JIRA project here.请在此提交关于我们JIRA项目的想法。

The minimum supported version of Node.js is now v12.9 or greater for version 4 of the driver. 对于驱动程序版本4,Node.js的最低支持版本现在是v12.9或更高版本。Support for our 3.x branches will continue until summer 2022 to allow time to upgrade.对我们3.x分支的支持将持续到2022年夏季,以便有时间升级。

Note

3.x supports back to Node.js v4.3.x支持返回Node.js v4。

Our Cursor implentation is now updated to make it clear what is possible before and after execution of an operation.我们的游标实现现在已经更新,以明确在执行操作之前和之后可以做什么。

Example实例
const fc = collection.find({a: 2.3}).skip(1)
for await (const doc of fc) {
  console.log(doc)
  fc.limit(1) // incorrect usage, cursor already executing
}

There was inconsistency surrounding how the cursor would error if a setting was applied after cursor execution began. 如果在游标执行开始后应用设置,则游标将如何出错,存在不一致性。Now, the cursor will throw an error when attempting to apply operations in an invalid state, similar to the following:现在,当尝试在无效状态下应用操作时,光标将抛出一个错误,如下所示:

MongoError: Cursor is already initialized

  • Affected classes:受影响类别:

    • AbstractCursor
    • FindCursor
    • AggregationCursor
    • ChangeStreamCursor (This is the underlying cursor for ChangeStream)(这是ChangeStream的基础游标)
    • ListCollectionsCursor

Our Cursor types no longer extend Readable directly. They must be transformed into a stream by calling cursor.stream().

Example
const cursor = collection.find({})
const stream = cursor.stream()
stream.on("data", data=> console.log)
stream.on("error", () => client.close())

Use hasNext() and next() for manual iteration. Use for await of syntax or any Promise helpers for asynchronous iteration.

With type hinting, you should find that options passed to a MongoClient are enumerated and discoverable. We've made a large effort to process all options in the driver to give early warnings about incompatible settings to get your app up and running in a correct state quickly.

  • checkServerIdentity is no longer checked before being passed to the underlying Node API. Previously, accepted values were false, or a function. Now, the argument must be a function. Specifying a boolean will result in an error being thrown.
  • It is longer required to specify useUnifiedTopology or useNewUrlParser.

This method no longer supports a strict option, which returned an error if the collection did not exist. To assert the existence of a collection, use the listCollections() method instead.

Example
const collections = (await db.listCollections({}, { nameOnly: true })
  .toArray()).map(
    ({name}) => name
  );
if (!collections.includes(myNewCollectionName)) {
  throw new Error(`${myNewCollectionName}doesn't exist`);
}

BulkWriteError is now renamed to MongoBulkWriteError.

When running bulk operations that make writes you can encounter errors depending on your settings. Import the new class name MongoBulkWriteError when testing for errors in bulk operations.

DB is no longer an EventEmitter. Listen for events directly from your MongoClient instance.

The Collection.group() helper, deprecated since MongoDB 3.4, is now removed. Use the aggregation pipeline $group operator instead.

  • gssapiServiceName is now removed. Use authMechanismProperties.SERVICE_NAME in the URI or as an option on MongoClientOptions.

    Example
    ?authMechanismProperties.SERVICE_NAME
    // or
    new MongoClient(url, { SERVICE_NAME: "alternateServiceName" })
  • Specifying username and password as options is only supported in the URI or as an option on MongoClientOptions.仅在URI中或MongoClient上支持将用户名和密码指定为选项。

    Example
    new MongoClient("mongodb://username:password@<host><port>")
    // or
    new MongoClient(url, { auth: { username: "<>", password: "<>" } })

The GridStore API (already deprecated in 3.x) is now replaced with GridFSBucket. GridStoreAPI(在3.x中已经弃用)现在被GridFSBucket取代。For more information on GridFS, see the mongodb manual.有关GridFS的更多信息,请参阅mongodb手册

Below are some snippets that represent equivalent operations.下面是一些表示等效操作的代码段。

Example实例
// old way
const gs = new GridStore(db, filename, mode[, options])
// new way
const bucket = new GridFSBucket(client.db('test')[,options])

GridFSBucket uses the Node.js Stream API. You can replicate file seeking by using the start and end options, creating a download stream from your GridFSBucket.GridFSBucket使用Node.js流API。您可以使用startend选项复制文件查找,从GridFSBucket创建下载流。

Example实例
bucket.openDownloadStreamByName(filename, { start: 0, end: 100 })
Example实例
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(); }); }); });
Note

GridFSBucket does not need to be closed like GridStore.

Example
// old way
GridStore.unlink(db, name, callback);
// new way
bucket.delete(file_id);

File metadata that used to be accessible on the GridStore instance can be found by querying the bucket.

Example
const fileMetaDataList: GridFSFile[] = bucket.find({}).toArray();
  • We internally now only manage a unifiedTopology when you connect to a mongod. The differences between this and previous versions is detailed here.
  • It is longer required to specify useUnifiedTopology or useNewUrlParser.
  • You must use the new directConnection option to connect to unitiliazed replica set members.

Support is now added for fine-grained verbosity modes. You can learn more about each mode here.

The instrument() method is now removed. Use command monitoring instead. See our guide on command monitoring for more information.

For a detailed list of breaking changes, removals, and associated JIRA tickets, see the detailed list here.

New features of the 3.6 Node.js driver release include:

  • Added support for the MONGODB-AWS authentication mechanism using Amazon Web Services (AWS) Identity and Access Management (IAM) credentials
  • Added support for Online Certificate Status Protocol (OCSP)
  • The find() method supports allowDiskUse() for sorts that require too much memory to execute in RAM
  • The update() and replaceOne() methods support index hints
  • A reduction in recovery time for topology changes and failover events
  • Improvements in validation testing for the default writeConcern
  • Authentication requires fewer round trips to the server, resulting in faster connection setup
  • Shorter Salted Challenge Response Authentication Mechanism (SCRAM) conversations
  • Ability to create collections and indexes for multiple document transactions
  • Running validation for a collection in the background