yarn mongodb 3.5.0

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

Release Highlights

CMAP-compliant Connection Pool

This release introduces a modern replacement for the driver's connection pool, available only with the
unified topology. A major effort was made in early 2019 to fully specifiy connection pools for MongoDB
drivers (see: CMAP specification), and this release brings the Node.js driver in line with that


The new pool supports monitoring for all aspects of its behavior. This allows deep introspection into
the operation of the connection pool, as well as an ability to profile the lifetime of an operation
when used in conjunction with command monitoring.

Stream-first Connection Design

The Connection class was completely rewritten for the new pool adopting a stream-first mentality. All
wire message processing and compression is handled in a duplex stream called the MessageStream, and
that stream is connected bidirectionally to the underlaying TCP socket. The result is a connection which
gains the general benefit of streams: better performance, less memory pressure, backpressure support. It
also opens the possiblity of supporting non-TCP/UDP streams as a transport for the driver.


The new connection pool has a concept of a "wait queue", which allows operation requests to buffer waiting
for a connection to execute against. There is no timeout by default, but users can now specify a new value
waitQueueTimeoutMS in their connection string or MongoClient options to proactively cancel operations
that have waited too long.

Remember that the new connection pool is only available for the "Unified Topology", so remember to pass
useUnifiedTopology: true to your MongoClient constructor to use it!

Dedicated monitoring connection

Both the legacy and unified SDAM implementations have until now executed monitoring checks as priority
messages in the legacy Pool implementation. This means that monitoring (ismaster) operations were
prioritized over other queued operations, but also means that monitoring could be indefinitely blocked,
in particular during failover or black hole scenarios. The default socket timeout is null (read: Infinity),
so if the pool was completely saturated with operations, there may be no ability to execute a monitoring
check and determine that the connection to a server was no longer valid. This version of the driver
introduces a new Monitor class which manages its own dedicated monitoring connection to each known

Server selection errors

In v3.3.0 of the driver we introduced a new MongoTimeoutError for all errors covered by the server
selection loop, leading to a spike in bug reports with a title similar to Server selection timed out after 30000ms.
Even though the error type itself had an attached reason field, we still feel it was easy to miss why
the selection had failed. As a result we have introduced a new type MongoServerSelectionError which
will use the originating error (reason) for its message, better informing users what caused a
selection error, while still also conveying it is an error in server selection.

Release Notes

New Feature

  • [NODE-1742] - Implement Connection Monitoring and Pooling spec

  • [NODE-2386] - Use a dedicated monitoring thread


  • [NODE-2400] - Synchronous errors are swallowed by executeOperation

  • [NODE-2417] - Server descriptions with me mismatch from primary response should be removed

  • [NODE-2418] - client platform not sent in metadata for CMAP connections


  • [NODE-1619] - Remove wasteful empty Buffer allocations in Connection

  • [NODE-2049] - Add "connectionError" as a valid "reason" for a ConnectionCheckOutFailedEvent when connection set up fails

  • [NODE-2397] - Make server selection errors more informative

  • [NODE-2402] - Integrate CMAP connection pool into unified topology

  • [NODE-2419] - Improve traceability of CMAP events

  • [NODE-2033] - Ignore ConnectionReadyEvent in CMAP pool creation test

latest releases: 3.6.3, 3.6.2, 3.5.11...
12 months ago