The MongoDB Rust driver team is pleased to announce the v2.7.0 release of the mongodb
crate, now available for download from crates.io.
Highlighted Changes
Serialization Behavior Change
When serializing values via serde, the serializer can indicate whether or not the target format is human-readable, allowing types to change behavior based on that. The Rust driver had inadvertently been serializing values given to find_one_and_replace
and replace_one
as human-readible when all other methods serialize as non-human-readible; this bug is fixed in 2.7.0, with those methods also serializing as non-human-readible.
However, it is potentially possible (if unlikely) that user code may rely on this bug. If your code does rely on human-readable serialization, you can specify that via the new human_readable_serialization
field in CollectionOptions
.
run_cursor_command
The Rust driver provides the run_command
method as a way for users to directly send bson commands to the server; this is particularly useful when the driver does not yet have support for a newly-added server command. However, using this with commands that return a cursor requires re-implementing the logic for cursor iteration, which can be tedious and error-prone. The new run_cursor_command
method avoids those problems, directly returning a Cursor
using the same iteration logic as other methods.
SDAM Logging
The Rust driver will now log SDAM events when using the tracing-unstable
feature.
Client Management
The Client
type now provides three additional ways to shape behavior to fit your workload:
ClientOptions.max_connecting
lets you specify how many "in flight" connections can be established in parallel. This was previously fixed at 2 and defaults to the same value.Client::warm_connection_pool
will create new connections to bring the connection pool up tomin_pool_size
, which can provide more predictable performance in some circumstances.Client::shutdown
will cleanly stop background tasks and wait for outstanding handles to be dropped. This is particularly useful when using event handlers that reference external resources, as otherwise those handlers may be invoked in a background task even after theClient
has been dropped.
Included Changes
Below are a selected list of changes with user impact; for a full list of changes see this GitHub query.
New Features
- RUST-1420 Cache AWS credentials received from endpoints (#905)
- RUST-1604 Add custom bucketing fields to timeseries options (#907)
- RUST-1588: Add RunCursorCommand (#912)
- RUST-802 Support Unix Domain Sockets (#908) (thanks @PureWhiteWu!)
- RUST-1509 SDAM Logging (#918)
- RUST-1608 Clean shutdown for Client (#920)
- RUST-1712 Provide a connection pool warmup method (#932)
- RUST-1712 Support User Configuration for max_connecting (#923) (thanks @LuisOsta!)
- RUST-1687 Add human_readable_serialization option to Collection (#902) (thanks @maiconpavi!)
Improvements
- RUST-1433 Propagate original error for some labeled retry errors (#903)
- minor: improve README.md (#934)
- upgrade webpki (#935) (thanks @fuchsnj!)
- RUST-1763 deprecate CollectionOptions::human_readable_serialization (#957) (#959)
Bugfixes
- Force non-human readable serialization in collections (#919) (#924) (thanks @kodemartin!)
- RUST-1699 / RUST-1718 AWS authentication fixes (#926)
- RUST-1719 Fix panic after SessionCursor::with_type is called (#928) (thanks @mlokr!)
- RUST-1743 Fix gridfs numeric type serialization (#941)
- RUST-1757 Fix final cursor batch handling (#951) (#954)
- fixing the find or delete serde inconsistency (#948) (#955) (thanks @mlokr!)
- minor: pin async-executor (#964) (#965)