Skip to content

Releases: mongodb/node-mongodb-native

v4.6.0-alpha.0

04 May 21:00
3269a6e
Compare
Choose a tag to compare
v4.6.0-alpha.0 Pre-release
Pre-release

The MongoDB Node.js team is pleased to announce version v4.6.0-alpha.0 of the mongodb package!

Release Highlights

This release is for internal testing - NOT intended for use production.

Features

Bug Fixes

Documentation

v4.5.0

04 Apr 20:32
3dba3ae
Compare
Choose a tag to compare

The MongoDB Node.js team is pleased to announce version 4.5.0 of the mongodb package!

Release Highlights

This release includes a number of enhancements noted below.

comment option support

The comment option is now widely available: by setting a comment on an operation you can trace its value in database logs for more insights.

collection.insertOne(
  { name: 'spot' },
  { comment: { started: new Date() } }
)

An example of a log line, trimmed for brevity. We can see the timestamp of the log and the time created on our client application differ.

{
  "t": { "$date": "2022-04-04T16:08:56.079-04:00" },
  "attr": {
    "commandArgs": {
      "documents": [ { "_id": "...", "name": "spot" } ],
      "comment": { "started": { "$date": "2022-04-04T20:08:56.072Z" } } }
  }
}

Socket timeout fixes for FaaS environments

This release includes a fix for serverless environments where transient serverHeartBeatFailure events that could be corrected to serverHeartBeatSucceeded events in the next tick of the event loop were nonetheless handled as an actual issue with the client's connection and caused unnecessary resource clean up routines.

It turns out that since Node.js handles timeout events first in the event loop, socket timeouts expire while the FaaS environment is dormant and the timeout handler code is the first thing that runs upon function wake prior to checking for any data from the server. Delaying the timeout handling until after the data reading phase avoids the sleep-induced timeout error in the cases where the connection is still healthy.

TS fixes for 4.7

Typescript 4.7 may not be out yet but in preparation for its release we've fixed issues compiling against that version. The main new obstacle was defaulting generic arguments that require that the constraining condition enforce similarity with the defaulted type. You may notice that our change stream watch<T extends Document = Document>() methods now requires that T extends Document, a requirement that already had to be met by the underlying ChangeStreamDocument type.

Features

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.4.1

03 Mar 17:03
63eb301
Compare
Choose a tag to compare

The MongoDB Node.js team is pleased to announce version 4.4.1 of the mongodb package!

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.4.0

17 Feb 22:10
b578d89
Compare
Choose a tag to compare

The MongoDB Node.js team is pleased to announce version 4.4.0 of the mongodb package!

Release Highlights

This release includes a few new features described below.

KMIP

KMIP can now be configured as a KMS provider for CSFLE by providing the KMIP endpoint in the kmsProviders option.

Example:

new MongoClient(uri, { autoEncryption: { kmsProviders: { kmip: { endpoint: 'host:port' }}}})

CSFLE TLS

Custom TLS options can now be provided for connection to the KMS servers on a per KMS provider basis.

Example:

new MongoClient(uri, { autoEncryption: { tlsOptions: { aws: { tlsCAFile: 'path/to/file' }}}})

Valid options are tlsCAFile, tlsCertificateKeyFile, tlsCertificateKeyFilePassword and all accept strings as values: a string path to a certificate location on the file system or a string password.

Kerberos

Hostname canonicalization when using GSSAPI authentication now accepts 'none', 'forward', and 'forwardAndReverse' as auth mechanism properties. 'none' will perform no canonicalization (default), 'forward' will perform a forward cname lookup, and 'forwardAndReverse' will perform a forward lookup followed by a reverse PTR lookup on the IP address. Previous boolean values are still accepted and map to false -> 'none' and true -> 'forwardAndReverse'.

Example:

new MongoClient('mongodb://user:pass@host:port/db?authMechanism=GSSAPI&authMechanismProperties=CANONICALIZE_HOST_NAME=forward');

For cases when the service host name differs from the connection’s host name (most likely when creating new users on localhost), a SERVICE_HOST auth mechanism property may now be provided.

Example:

new MongoClient('mongodb://user:pass@host:port/db?authMechanism=GSSAPI&authMechanismProperties=SERVICE_HOST:example.com')

⚠️ collection.count() and cursor.count()

In the 4.0.0 release of the driver, the deprecated collection.count() method was inadvertently changed to behave like collection.countDocuments(). In this release, we have updated the collection.count() behavior to match the legacy behavior:

  • If a query is passed in, collection.count will behave the same as collection.countDocuments and perform a collection scan.
  • If no query is passed in, collection.count will behave the same as collection.estimatedDocumentCount and rely on collection metadata.

We also deprecated the cursor.count() method and will remove it in the next major version along with collection.count(); please use collection.estimatedDocumentCount() or collection.countDocuments() instead.

Features

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.3.1

18 Jan 21:01
8970ac1
Compare
Choose a tag to compare

The MongoDB Node.js team is pleased to announce version 4.3.1 of the mongodb package!

Release Highlights

In this patch release, we address the limitation introduced in 4.3.0 with the dot notation Typescript improvements and recursive types.
Namely, this fix removes compilation errors for self-referential types.

Note that this fix still has the following limitations:

  • type checking defaults to any after the first level of recursion for self-referential types
interface Node {
  next: Node | null;
}

declare const collection: Collection<Node>;

// no error here even though `next` is of type `Node | null`
collection.find({
  next: {
    next: 'asdf'
  }
});
  • indirectly self-referential types are still not supported
interface A {
  b: B;
}

interface B {
  a: A;
}

declare const mutuallyRecursive: Collection<A>;

// this will throw an error because there is indirect recursion 
// between types (A depends on B which depends on A and so on)
mutuallyRecursive.find({});

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.3.0

06 Jan 23:54
e58fbf2
Compare
Choose a tag to compare

The MongoDB Node.js team is pleased to announce version 4.3.0 of the mongodb package!

Release Highlights

This release includes SOCKS5 support and a couple of other important features and bug fixes that we hope will improve your experience with the node driver.

The SOCKS5 options can be configured via the proxyHost, proxyPort, proxyPassword and proxyUsername options in the connection string passed to the MongoClient instance. Big thanks to @addaleax for helping with this feature!

The other notable features address performance and TypeScript as detailed below.

Performance

The original release of the 4.x driver relied on a new version of the BSON library that enables UTF-8 validation by default, resulting in noticeable performance degradation over the 3.x driver when processing over string data. This release introduces an option to opt out of this validation by specifying enableUtf8Validation: false at the client, database, collection, or individual operation level.

For example:

// disable UTF-8 validation globally on the MongoDB client
const client = new MongoClient('mongodb://localhost:27017', { enableUtf8Validation: false });

// disable UTF-8 validation for a particular operation
const client = new MongoClient('mongodb://localhost:27017');
const db = client.db('database name');
const collection = db.collection('collection name');

await collection.find({ name: 'John Doe'}, { enableUtf8Validation: false });

TypeScript

Type inference for nested documents

Thanks to an amazing contribution from @avaly we now have support for key auto-completion and type hinting on nested documents! MongoDB permits using dotted keys to reference nested keys or specific array indexes within your documents as a shorthand for getting at keys beneath the top layer. Typescript's Template Literal types allow us to take the interface defined on a collection and calculate at compile time the nested keys and indexes available.

For example:

interface Human {
  name: string;
  age: number;
}

interface Pet {
  name: string
  bestFriend: Human
}


const pets = client.db().collection<Pet>('pets');
await pets.findOne({ 'bestFriend.age': 'young!' }) // typescript error!

Here's what autocomplete suggests in VSCode:
Screen Shot 2022-01-06 at 5 29 17 PM

WARNING: There is a known shortcoming to this feature: recursive types can no longer be used in your schema. For example, an interface that references itself or references another schema that references back to the root schema cannot be used on our Collection generic argument. Unlike at runtime where a "recursive" shaped document has an eventual stopping point we don't have the tools within the language to declare a base case enumerating nested keys. We hope this does not cause friction when upgrading driver versions: please do not hesitate to reach out with any feedback you have about this feature.

Consistent type inference for the _id type

We have also enhanced the type inference for the _id type. Now, when performing operations on a collection, the following holds true based on the type of the schema:

  • If no _id is specified on the schema, it is inferred to be of type ObjectId and is optional on inserts.
  • If an _id is specified on the schema as required, then the _id type is inferred to be of the specified type and is required on inserts.
  • If an _id is specified on the schema as optional, it is inferred to be of the specified type and is optional on inserts: this format is intended to be used with the pkFactory option in order to ensure a consistent _id is assigned to every new document.

Features

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.2.2

13 Dec 20:44
ea1f1f9
Compare
Choose a tag to compare

The MongoDB Node.js team is pleased to announce version 4.2.2 of the mongodb package!

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.2.1

30 Nov 18:15
99356eb
Compare
Choose a tag to compare

The MongoDB Node.js team is pleased to announce version 4.2.1 of the mongodb package!

Release Highlights

This release fixes an issue with the dbName being overridden by the authSource option. Additionally, we have ensured that cursors re-run server selection when fetching additional batches, which should reduce issues encountered in long running function as a service environments.

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.2.0

17 Nov 16:22
a766f1c
Compare
Choose a tag to compare

Release Highlights

This release includes a number of features we’re happy to announce. You can now run aggregation pipelines that write write to a MongoDB collection using $out and $merge stages on secondaries! We’ve added an option to limit the number of hosts the driver will connect to when using SRV DNS lookups to manage your host addresses. And lastly, the authorizedCollection option is now usable on the db.listCollections() function.

Additionally, in this release, we’ve marked collection.mapReduce() as deprecated. The same functionality can be replicated in the much more flexible aggregation pipeline. Visit Map-Reduce to Aggregation Pipeline to learn more.

The minimum supported MongoDB version is 3.6. Attempts to connect to a MongoDB server older than 3.6 will result in an error.
Please take note of the MongoDB Software Lifecycle Schedules for timeframes of supported server versions.

Features

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.

v4.1.4

03 Nov 21:12
c01b0ad
Compare
Choose a tag to compare

Release Highlights

This release includes a couple of bug fixes as noted below:

Bug Fixes

Documentation

We invite you to try the mongodb library immediately, and report any issues to the NODE project.