The MongoDB Node.js team is pleased to announce version 4.12.0 of the mongodb package!
Release Highlights
ChangeStreams are now AsyncIterators
ChangeStreams are now async iterables and can be used anywhere that expects an async iterable. Notably, change streams can now be used in Javascript for-await loops:
const changeStream = collection.watch();
for await (const change of changeStream) {
console.log(“Received change: “, change);
}
Some users may have been using change streams in for-await loops manually by using a for-await loop with the ChangeStream’s internal cursor. For example:
const changeStream = collection.watch();
for await (const change of changeStream.cursor) {
console.log(“Received change: “, change);
}
The change stream cursor has no support for resumabilty and consequently the change stream will never attempt to resume any errors. We strongly caution against using a change stream cursor as an async iterable and strongly recommend using the change stream directly.
Server Monitoring Fix When Monitoring Events are Skipped
Version 4.7.0 of the Node driver released an improvement to our server monitoring in FAAS environments by allowing the driver to skip monitoring events if there were more than one monitoring events in the queue when the monitoring code restarted. When skipping monitoring events that contained a topology change, the driver would incorrectly fail to update its view of the topology.
Version 4.12.0 fixes this issue by ensuring that the topology is always updated when monitoring events are processed.
Performance Improvements with Buffering
This release also modifies the data structures used internally in the driver to use linked lists in places where random access is not required and constant time insertion and deletion is beneficial.
External Contributions
Many thanks to @ImRodry for helping us fix the documentation for our deprecated callback overloads in this release!
Features
- NODE-4681: deprecate modify result (#3459) (6a8776c)
- NODE-4683: make ChangeStream an async iterable (#3454) (df8d9a4)
- NODE-4733: deprecate result and getLastOp (#3458) (a143d3b)
- NODE-4757: deprecate unused PipeOptions (#3466) (1a5e619)
- NODE-4809: deprecate the existing logger (#3464) (1eea4f0)
Bug Fixes
- NODE-4609: allow mapping to falsey non-null values in cursors (#3452) (1bf6ef1)
- NODE-4735: fix change stream consecutive resumabilty (#3453) (89b27e9)
- NODE-4753: remove erroneous deprecation of geoNear (#3465) (199dcaf)
- NODE-4783: handle orphaned operation descriptions (#3463) (4c9b4d8)
Documentation
We invite you to try the mongodb
library immediately, and report any issues to the NODE project.