Skip to content

Releases: mongodb/node-mongodb-native

v3.4.1

19 Dec 19:26
Compare
Choose a tag to compare

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

Release Highlights

This is a patch release addressing two regressions introduced in bulk writes and SCRAM authentication.

Release Notes

Bug

  • [NODE-2383] - Unordered bulk write reports wrong error indexes
  • [NODE-2390] - Sporadic connection errors with AWS Lambda

v3.4.0

10 Dec 16:41
Compare
Choose a tag to compare

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

Release Highlights

Client Side Field Level Encryption (CSFLE)

The major functionality introduced in this release, and indeed the reason for the minor version bump, is full support for MongoDB's Client Side Field Level Encryption. The bulk of the support comes through an addon module mongodb-client-encryption, please refer to the reference documentation for more details.

TLS Option Variants

This release also introduces a number of new connection string options related to TLS. In order to unify uri options across all MongoDB drivers, and to better signal the technology the driver is actually using, all ssl related options now have a corresponding tls variant. NOTE: your application will not break if you continue to use the ssl variants, but deprecation warnings will be introduced prior to the 4.x driver release.

@adityapatadia initially pointed out that these tls variants had no effect, now they do. Thank you @adityapatadia!

mongodb+srv

A critical bug was found by @ephemer with the recently introduced "mongos discovery", where a typo caused DNS polling to occur at very fast intervals.

Additionally, user @mpilar identified and fixed a bug with our mongodb+srv parsing, where user-provided client options were not overriding those provided by a TXT record lookup.

Thank you very much @ephemer and @mpilar!

server selection

@adityapatadia also helped find a bug in the server selection code which rendered selection with a nearest read preference non-functional. Thanks again @adityapatadia!

bulkWrite

A small bug was fixed causing errors in an unordered bulk write to be reported in incorrect order. If an error occurs in a bulk write now, then it will show up in the writeErrors field of the resulting BulkWriteError with an index that corresponds to the position the operation had in the initial input.

Release Notes

Bug

  • [NODE-1547] - Default Port is not applied
  • [NODE-1991] - replaceOne() also returns the replacement document?
  • [NODE-2089] - Only apply TransientTransactionError label within a transaction
  • [NODE-2308] - Bulk write error returns incorrect index in WriteError for unordered writes
  • [NODE-2334] - Driver must error if autoEncryption is attempted against wire version < 8
  • [NODE-2335] - Node Driver does not follow Initial DNS Seedlist Discovery spec
  • [NODE-2353] - Timed out connections should not half-close on destroy
  • [NODE-2356] - nearest server is not selected when useUnifiedTopology is set
  • [NODE-2359] - tls option in connection URI has no effect
  • [NODE-2375] - Typo in `rescanIntervalSrvMS` causes spike in DNS lookups
  • [NODE-2376] - Malicious server can accept incomplete SCRAM authentication and bypass mutual authentication

New Feature

  • [NODE-2094] - FLE GA Support

    Improvement

    • [NODE-2024] - Document createIndexes usage
    • [NODE-2052] - [FLE] Add a corpus test that exhaustively enumerates all ways to encrypt all BSON value types
    • [NODE-2053] - [FLE] Add prose test for explicit encryption with key alt name
    • [NODE-2298] - Add driver API documentation for Field Level Encryption
    • [NODE-2363] - Allow connection establishment to be cancelled
    • [NODE-2306] - Driver module does not export `BulkWriteError`
    • [NODE-2338] - build FLE addon on windows

    v3.3.5

    26 Nov 14:01
    Compare
    Choose a tag to compare

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

    Release Highlights

    unified topology

    This patch release includes additional fixes for the regression in the unified topology discovered in v3.3.2, expanding our testing infrastructure to include a simulated workload during failover testing. There was a bug when connecting to single-node replicasets which could result in a stack overflow which was corrected. Additionally, events and options which are incompatible with the unified topology will now emit a warning message.

    mongodb+srv

    The release also includes a fix submitted by @mpilar, who found an inconsistency in our implementation of the "Initial Seedlist Discovery" specification. An authSource specified in the options passed to MongoClient would be overridden by an authSource provided in the TXT record checked during initial seedlist discovery over SRV. Thank you very much Miguel!

    bulkWrite

    BulkWriteError is now exported at the top level of the module so that users can catch them easily. Additionally, a fix was made to ensure that the index of operations passed into an unordered bulk operation were preserved when reporting possible errors in the future.

    Release Notes

    Bug

    • [NODE-1747] - Replica set causes MongoNetworkError due to not connecting with fully qualified domain name
    • [NODE-2089] - Only apply TransientTransactionError label within a transaction
    • [NODE-2143] - getaddrinfo ENOTFOUND error on Windows 10 due to failed fallback to ipv4 after ipv6 lookup fails
    • [NODE-2308] - Bulk write error returns incorrect index in WriteError for unordered writes
    • [NODE-2332] - useUnifiedTopology - replicaset
    • [NODE-2335] - Node Driver does not follow Initial DNS Seedlist Discovery spec
    • [NODE-2342] - Enabling useUnifiedTopology results in stack overflow when connecting to uninitialized replica set

    Improvement

    • [NODE-2348] - Document and notify on deprecated events and options for unified topology
    • [NODE-2306] - Driver module does not export `BulkWriteError`

    v3.3.4

    11 Nov 22:36
    Compare
    Choose a tag to compare

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

    Release Highlights

    This release primary consists of improvements to the "unified topology". In particular, a regression with interaction between the connection pool and topology could result in servers which "go away" (due to network error, for example) would not return, resulting in a MongoTimeoutError.

    Release Notes

    Bug

    • [NODE-2123] - MaxListenersExceededWarning caused by topologyDescriptionChanged
    • [NODE-2214] - Incorrect removal of Unknown server type from ReplicaSetNoPrimary topology
    • [NODE-2234] - isConnected() takes legacy path with useUnifiedTopology
    • [NODE-2251] - `useUnifiedTopology` continuously emits 'close' event when replica set member is down
    • [NODE-2268] - Legacy SDAM ReplSet topology reports incorrect topology ID
    • [NODE-2270] - Servers are not removed from unknownServer list, leaking
    • [NODE-2274] - Unified topology never regains nodes which temporarily go down
    • [NODE-2277] - Unhandled error when server is offline

    Improvement

    • [NODE-1517] - normalize state management across all stateful types
    • [NODE-2257] - Introduce ServerDescription equality to reduce SDAM events
    • [NODE-2263] - support ability to pass hint to update
    • [NODE-2276] - Add SDAM test for debouncing topology description updates
    • [NODE-2280] - Integrate a state machine into the unified topology
    • [NODE-2309] - Document the design and rationale of the unified topology
    • [NODE-2316] - Correct client metadata for unified topology

    v3.3.0

    13 Aug 19:22
    Compare
    Choose a tag to compare

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

    Release Highlights

    Server Version 4.2 feature support

    This latest release brings support for features in the newly released MongoDB v4.2:

    • Distributed Transactions
    • On-Demand Materialized Views with the $merge operator
    • Wildcard Indexes
    • Retryable Reads
    • MongoDB Query Language Enhancements.

    SRV Polling for Sharded Clusters

    The Driver has supported connecting to a cluster using an SRV record since version 3.0. Prior to now, we would only resolve the SRV record when initially connecting. This was fine for single replica sets, as the driver is able to discover new members added after initial connect from any member of a replica set. However, in a sharded deployment, individual mongos processes do not have an awareness of each other. This means that if the deployment changes in a shared cluster, the driver would have no way of knowing without disconnecting and connecting with a new client.

    Starting in 3.3, if a driver connects to a sharded cluster with an SRV record, we will now periodically check that SRV record for any changes in the deployment, and update the client-side connections accordingly.

    **NOTE: This feature is only available when starting a client with { useUnifiedTopology: true } **

    Beta support for MongoDB Client-Side Encryption

    The driver now has support for MongoDB Client-Side Encryption. This requires installing the mongodb-client-encryption npm package in your project.

    Merged mongodb-core into node-mongodb-native

    Up until this release, the mongodb driver has consisted of two components:

    • mongodb-core: The low-level engine of the driver.
    • node-mongodb-native: The API layer of the driver, published as mongodb

    Over time, this separation has done more harm than good, and has led to increased development time for repairing bugs and implementing new features. Starting in the 3.3 release of mongodb, we have merged mongodb-core into node-mongodb-native, removing this barrier to development.

    Release Notes

    Bug

    • [NODE-1480] - 'Should handle Error thrown during operation' in error_tests.js should handle exception
    • [NODE-1994] - fix 'should correctly handle multiple unordered batch API'
    • [NODE-2022] - startAtOperationTime and resumeToken conflict on cursor restarts
    • [NODE-2051] - MongoClient with autoEncryption does not clean up MongoCryptD client
    • [NODE-2054] - [FLE] AutoEncrypter MongoClient does not use new url parser
    • [NODE-2060] - can't use database named 'constructor'
    • [NODE-2067] - requestid overflow
    • [NODE-2075] - Ensure error events also emit close events in change_stream.js
    • [NODE-2077] - Invalid staleness calculation

    Epic

    New Feature

    • [NODE-1740] - Implement Unified URI Options
    • [NODE-1745] - Support polling SRV records for mongos discovery
    • [NODE-1750] - Connections survive primary stepdown
    • [NODE-1766] - Aggregate command must be sent to a primary if it uses $out
    • [NODE-1820] - Resync CRUD spec tests to use transaction spec test format
    • [NODE-1824] - Support 'startAfter' option to the $changeStream stage
    • [NODE-1864] - Support Retryable Writes on by Default
    • [NODE-1866] - Support postBatchResumeToken in change streams
    • [NODE-1880] - Add support for majority read concern level to Aggregation $out
    • [NODE-1896] - Implement executeOperationV2
    • [NODE-1902] - Add "aspects" to all operation classes
    • [NODE-1920] - Add the ability to specify a pipeline to an update command
    • [NODE-1931] - Ensure 4.0 drivers return an error when attempting sharded transactions on 4.2
    • [NODE-1965] - More useful error when bulk writes fail
    • [NODE-2023] - set default for useRecoveryToken to true
    • [NODE-2071] - [FLE]: use crypto callbacks
    • [NODE-2078] - Improve error message for missing `mongodb-client-encryption`
    • [NODE-2095] - Operating System Removals/Updates for 4.2
    • [NODE-2098] - Raise an actionable error message when retryWrites fails due to using an unsupported storage engine
    • [NODE-2102] - Mark the FLE feature as "Beta" in driver docs

    Task

    • [NODE-1854] - POC - Support Client-side Field Level Encryption
    • [NODE-1949] - Add tests for postBatchResumeToken support
    • [NODE-1950] - Test writes in transactions do not send writeConcern when collection write concern is w=0
    • [NODE-1951] - Amend change stream missing resume token tests for wire version 8+
    • [NODE-1966] - Merge core and native modules into a single driver
    • [NODE-1979] - Clarify resume token used in resuming and getResumeToken
    • [NODE-2004] - Spec: Finer-grained updates from aggregation via $merge
    • [NODE-2017] - Fix result assertion in change stream spec test

    Improvement

    • [NODE-1425] - validate internal representation of `ReadPreference`
    • [NODE-1557] - Clean up constructor for ClientSession
    • [NODE-1682] - Implement connection pool reset
    • [NODE-1756] - applyWriteConcern should take a writeConcern
    • [NODE-1811] - Refactor readconcern tests
    • [NODE-1897] - Move all operations to their own classes
    • [NODE-1910] - Refactor findAnd* operations to extend findAndModify
    • [NODE-1943] - Move executeOperation to executeLegacyOperation
    • [NODE-1944] - Use new CommandOperation for operations
    • [NODE-1947] - create a `MongoNamespace` for database and...
    Read more

    v3.2.1

    21 Mar 20:13
    Compare
    Choose a tag to compare

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

    Due to a publishing snafu v3.2.1 was immediately published without a proper v3.2.0 release

    Release Highlights

    2.x EOL

    With the v3.1.0 release we officially deprecated the 2.x driver. With this release that driver is effectively EOL, and will no longer be supported. Please update your driver as soon as possible.

    Unified Topology

    In this release we are very excited to announce the immediate availability of a complete rewrite of the driver's "topology" layer. This is the core brains of the driver responsible for things like server selection, server discovery and monitoring. This work combines the three existing topology concepts (`Mongos`, `ReplSet`, and `Server`) into a single type `Topology`. The new `Topology` type uses the same machinery to represent all three types, greatly improving our ability to maintain the code, and reducing the chance for bug duplication.

    The Topology class no longer uses a callback store, instead relying on a server selection loop for operation execution. This means failed operations will fail faster, with more accurate stack traces and specifics about the failure. It generally makes it much easier to reason about what the driver is doing each time an operation is executed.

    You can enable it with the useUnifiedTopology feature flag passed to your MongoClient constructor, like so:

    const client = MongoClient('mongodb://localhost:27017', { useUnifiedTopology: true });
    

    This topology layer will replace the existing topologies in a breaking 4.x release later this year, so we strongly encourage our users to try it out as soon as possible.

    `withTransaction` helper

    Reliably committing a transaction in the face of errors can be a complicated endeavor using the MongoDB 4.0 drivers API. This version introduces a `withTransaction` helper method on the `ClientSession` object that allows application logic to be executed within a transaction. This method is capable of retrying either the commit operation or entire transaction as needed (and when the error permits) to better ensure that the transaction can complete successfully. Consider using this for all but the most complicated of transactions use cases.

    A call to withTransaction begins a new transaction, executes the provided function, and then attempts to commit the transaction. The function passed to withTransaction must take a session parameter, and this session must be passed to all methods within the function. If some error is encountered, it will attempt to re-commit the transaction before ultimately failing back to the user after aborting the transaction.
    NOTE: A mentioned, the passed in function MAY be retried multiple times, please keep this in mind when executing non-database operations within the function.

    Here’s an example of it in action:

    const client = new MongoClient();
    await client.connect();
    
    const session = client.startSession();
    
    // NOTE: the `withTransaction` method only supports functions that return a `Promise`
    try {
      await session.withTransaction(async function(session) {
         const coll = client.db('foo').collection('coll');
         await coll.insertOne({ a: 42 }, { session });
      });
    } catch (err) {
      // transaction failed after attempted retry
      console.dir({ err });
    }
    

    Cursors support asyncInterator and for..await..of loops

    `Symbol.asyncIterator` is defined on cursors for Node.js versions that support it (>=v10.x.x). This allows you to use for..await..of loops with cursors:
    client.connect().then(async function() {
      const collection = client.db(‘test’).collection(‘asyncIterators’);
      const cursor = collection.find();
    
      for await(const doc of cursor) {
        console.log(item);
      }
    });

    OP_MSG

    This release also brings support for a new wire protocol introduced originally in version 3.6 of the server.

    Database-level aggregation

    The server supports several collection-less aggregation source stages like `$currentOp` and `$listLocalSessions`. In this version we have added a `Db.prototype.aggregate` helper for database-level aggregations.

    Authentication

    Since the 3.6 server release, multiple authentication contexts for a single MongoClient have been prohibited. This release cleans up the final bits of internal api related to multiple auth contexts, and greatly improves our ability to maintain this code. This not only involved simplifying the implementation of our auth providers, but also a large refactor of how connections are established and handshaked. Calls to `auth` and `logout` are now no-ops, and top level API for this will be removed in the next major release.

    Release Notes

    Bug

    • [NODE-1534] - retryWrites=true, remove, and limit=0
    • [NODE-1658] - Fix normalizing option names coming from connection string
    • [NODE-1685] - SCRAM-SHA-256 tests are not actually run against replicaset
    • [NODE-1687] - Replicaset tests for core use Server and require primary on port 31000
    • [NODE-1736] - Explain useNewUrlParser
    • [NODE-1778] - BulkWrite: Incorrect batch-size calculations causes batch to fail
    • [NODE-1782] - New Topology layer fails to clear monitor on close
    • [NODE-1840] - useNewUrlParser: true causes "command find requires authentication"
    • [NODE-1874] - Wrong JavaScript const use in lib/operations/db_ops.js
    • [NODE-1876] - Uncatchable exceptions
    • [NODE-1898] - BulkWrite: Incorrect batch-size calculations when array contains object with undefined value

    New Feature

    • [NODE-1085] - OP_MSG support
    • [NODE-1259] - Refactor mongodb-core to use a single Topology type
    • [NODE-1684] - Define [Symbol.iterator] on our Cursor objects
    • [NODE-1741] - Implement Convenient API for Transactions
    • [NODE-1783] - Support running commands as aggregation
    • [NODE-1792] - Update handling of write concern errors by user management commands
    • [NODE-1793] - Transaction test runner should use "local" read concern when asserting the final collection state
    • [NODE-1841] - Disable TLS renegotiation when possible
    • [NODE-1850] - Drivers should ignore batchSize=0 for aggregate with $out
    • [NODE-1879] - Resync transaction spec tests for bulk write error reporting change

    Improvement

    • [NODE-1264] - provide pre-built binaries for kerberos and ext-bson using node-pre-gyp
    • [NODE-1291] - Integrate single `Topology` from Core into Native
    • [NODE-1334] - Remove mutation of user-owned objects
    • [NODE-1385] - Remove JSDOC that says [param=null]
    • [NODE-1435] - Remove unnecessary auth code from connection pool
    • [NODE-1436] - Remove duplicated code from auth providers
    • [NODE-1437] - Implement auth connection string tests
    • [NODE-1442] - Refactor Auth to exclusively use a MongoCredential object
    • [NODE-1453] - Resync SDAM tests
    • [NODE-1491] - Add option for applications to register a custom server selector
    • [NODE-1620] - Port authentication support to new Topology class
    • [NODE-1644] - Deprecate parallelCollectionScan helpers
    • [NODE-1674] - Fix auth workflow with regards to auth mechanism resolution
    • [NODE-1683] - Evaluate and correct monitoring in new SDAM layer
    • [NODE-1688] - Update atlas ...
    Read more

    V2.0.44

    28 Sep 11:34
    Compare
    Choose a tag to compare

    2.0.44 09-28-2015

    • Bug fixes for APM upconverting of legacy INSERT/UPDATE/REMOVE wire protocol messages.
    • NODE-562, fixed issue where a Replicaset MongoDB URI with a single seed and replSet name set would cause a single direct connection instead of topology discovery.
    • Updated mongodb-core to 1.2.14.
    • NODE-563 Introduced options.ignoreUndefined for db class and MongoClient db options, made serialize undefined to null default again but allowing for overrides on insert/update/delete operations.
    • Use handleCallback if result is an error for count queries. (Issue #1298, https://github.com/agclever)
    • Rewind cursor to correctly force reconnect on capped collections when first query comes back empty.
    • NODE-571 added code 59 to legacy server errors when SCRAM-SHA-1 mechanism fails.
    • NODE-572 Remove examples that use the second parameter to find().

    V2.0.43

    17 Sep 07:42
    Compare
    Choose a tag to compare
    • Propagate timeout event correctly to db instances.
    • Application Monitoring API (APM) implemented.
    • NOT providing replSet name in MongoClient connection URI will force single server connection. Fixes issue where it was impossible to directly connect to a replicaset member server.
    • Updated mongodb-core to 1.2.12.
    • NODE-541 Initial Support "read committed" isolation level where "committed" means confimed by the voting majority of a replica set.
    • GridStore doesn't share readPreference setting from connection string. (Issue #1295, https://github.com/zhangyaoxing)
    • fixed forceServerObjectId calls (Issue #1292, https://github.com/d-mon-)
    • Pass promise library through to DB function (Issue #1294, https://github.com/RovingCodeMonkey)