yarn mongodb 3.6.0

The MongoDB Node.js team is pleased to announce version 3.6.0 of the driver

NOTE: This version begins our official support for MongoDB 4.4

Release Highlights

Streaming topology changes

MongoDB drivers maintain a local view of the topology they are connected to, and ensure the accuracy of that view by polling connected nodes on average every ~10s. In MongoDB 4.4, drivers are now able to receive push notifications about topology updates, effectively reducing the time for client recovery in failover scenarios to the time it takes for the server to make the election and report the outcome.

This feature is enabled by default when connecting to MongoDB 4.4, no changes are needed for user code.

Authentication

MONGODB-AWS authentication mechanism

The MONGODB-AWS authentication mechanism uses your Amazon Web Services Identity and Access Management (AWS IAM) credentials to authenticate users on MongoDB 4.4+. Please read more about this new authentication mechanism in our documentation.

Performance improvements

There were two projects to transparently improve performance of authentication in MongoDB 4.4:

  • A driver can now include the first saslStart command in its initial handshake with server. This so-called "speculative authentication" allows us to reduce one roundtrip to the server for authentication a connection. This feature is only support for X.509, SCRAM-SHA-1 and SCRAM-SHA-256 (default) authentication mechanisms.

  • The SCRAM conversation between driver and server can now skip one of it's empty exchanges which also serves to reduce the roundtrips during a SCRAM authentication.

OCSP stapling testing

OCSP stapling greatly improves performance when using LetsEncrypt certificates, removing the need for an external request to LetsEncrypt servers for each authentication attempt. No additional changes were required to support OCSP stapling in the driver, but extensive testing was added to verify that the feature works as expected.

Changes in behavior of Db.prototype.createCollection

The createCollection helper used to internally run a listCollections command in order to see if a collection already existed before running the command. If it determined a collection with the same name existed, it would skip running the command and return an instance of Collection. This behavior was changed in v3.6.0 to avoid potentially serious bugs, specifically that the driver was not considering options passed into createCollection as part of the collection equality check. Imagine the following scenario:

const client = new MongoClient('...');
await client.connect();
 
await client.db('foo').collection('bar').insert({ importantField: 'llamas' });
await client.db('foo').createCollection('bar', {
  validator: { $jsonSchema: {
    bsonType: 'object',
    required: ['importantField'],
    properties: { name: { bsonType: 'boolean' } }
  }
});

The createCollection call which defines a JSON schema validator would be completely bypassed because of the existence of bar, which was implicitly created in the first command. Our policy is strictly adhere to semver, but in rare cases like this where we feel there is potential for a data corrupting bug, we make breaking behavioral changes to protect the user.

Documentation

Reference: http://mongodb.github.io/node-mongodb-native/3.6/
API: http://mongodb.github.io/node-mongodb-native/3.6/api/
Changelog: https://github.com/mongodb/node-mongodb-native/blob/3.6/HISTORY.md

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

Thanks very much to all the community members who contributed to this release!

Release Notes

Epic


New Feature



  • [NODE-2434] - Reduce Client Time To Recovery On Topology Changes

  • [NODE-2288] - MONGODB-AWS Support

  • [NODE-2289] - Support for allowDiskUse on find operations

  • [NODE-2290] - Allow passing hint to findAndModify update and replace operations

  • [NODE-2291] - Improve testing around default writeConcern

  • [NODE-2295] - Collection and index creation in multi-doc txns

  • [NODE-2427] - OCSP Support

  • [NODE-2487] - Support speculative authentication attempts in isMaster

  • [NODE-2301] - Support shorter SCRAM conversation

  • [NODE-2269] - Add support for validate command "background" option

Improvement



  • [NODE-2175] - Avoid using readConcern snapshot in sharded transaction tests

  • [NODE-2176] - Resync bson-corpus array.json to fix duplicate test names

  • [NODE-2393] - Change uri_options/auth-options spec test to enable conditional tests

  • [NODE-2394] - Verify max set version and max election id on topologies in SDAM spec tests

  • [NODE-2422] - Validate that mongocryptd is not spawned if bypassAutoEncryption=true

  • [NODE-2430] - Raise error if hint specified for unacknowledged update using OP_MSG or OP_UPDATE

  • [NODE-2431] - Reduce floating point precision required of extended json implementations

  • [NODE-2432] - Clarify behavior when "me" field doesn't match any values in "hosts" array

  • [NODE-2477] - Allow hinting the delete command

  • [NODE-2504] - Add SDAM test for incompatible server becoming compatible

  • [NODE-2506] - Ensure that the WriteConcernError "errInfo" object is propagated

  • [NODE-2538] - Add RetryableWriteError error labels to retryable transaction tests

  • [NODE-2546] - Deprecate geoHaystack and geoSearch

  • [NODE-2559] - Reduce race conditions in SDAM error handling

  • [NODE-2560] - Make 'reIndex' a standalone-only command

  • [NODE-2564] - Clarify how a driver must handle wrong set name in single topology

  • [NODE-2569] - 'CommitQuorum' option support for 'createIndexes’ command on MongoDB 4.4

  • [NODE-2576] - Raise error when hint option is provided on unacknowledged writes against any server version

  • [NODE-2592] - Update documentation for Text Search

  • [NODE-2594] - Do not add the RetryableWriteError label to errors that occur during a write within a transaction (excepting commitTransaction and abortTransaction)

  • [NODE-2622] - allowDiskUse option for find should be documented as only being supported in 4.4+

  • [NODE-2627] - Reduce default keepalive time to align with Azure defaults

  • [NODE-2659] - Drivers should retry replSetStepDown after "Unable to acquire X lock" error

  • [NODE-2661] - Define behavior of connectTimeoutMS=0 with streaming protocol

  • [NODE-2675] - Test that ElectionInProgress is not resumed

  • [NODE-2682] - Treat CursorNotFound as a resumable change stream error

  • [NODE-2150] - Bump wire protocol version for 4.4

  • [NODE-2379] - Expand use of error labels for RetryableWrites

  • [NODE-2423] - Deprecate oplogReplay find command option from CRUD spec

  • [NODE-2426] - Make ExceededTimeLimit retryable writes error

  • [NODE-2429] - GridFS index checking should support indexes created in the shell

  • [NODE-2433] - Lift restriction on authSource without credentials

  • [NODE-2452] - Unify behavior around configuration for replica set discovery

  • [NODE-2510] - Driver support for server Hedged Reads

  • [NODE-2516] - Update comment in Transactions withTxn examples for the manual.

  • [NODE-2557] - Remove replicaset from tests that perform reIndex command

Bug



  • [NODE-2416] - Confusing documentation for collection.aggregate collation option

  • [NODE-2502] - replaceOne example in test/examples/update_documents.js incorrect

  • [NODE-2537] - createCollection helper should not run listIndexes outside of strict mode

  • [NODE-2567] - Fix qs dependency for older node

  • [NODE-2616] - SDAM test typo "compatible"

  • [NODE-2623] - Gridfs doesn't allow to catch exception with length that exceeds file size

  • [NODE-2660] - Throw an error if bulk update documents don't contain update operator expressions

  • [NODE-2711] - Monitoring should not be immediately scheduled on streaming failure

latest releases: 4.0.0-beta.0, 3.6.3, 3.6.2...
5 months ago