mongo-c-driver 2.0.0
Announcing 2.0.0 of libbson and libmongoc, the libraries constituting the MongoDB C Driver.
libbson
New Features
- Add support for BSON Binary Vector.
Changes
BSON_ERROR_BUFFER_SIZE
is reduced from504
to503
to reserve the final byte for internal use.- The data layout of
bson_error_t
remains otherwise unchanged: the size is still 512 bytes and the offset of the.code
,.domain
, and.message
data members remain unchanged.
- The data layout of
- The pkg-config files
libbson-1.0
andlibbson-static-1.0
have been renamed tobson2
, andbson2-static
, respectively.
CMake Packages and Imported Targets
The bson-1.0
CMake package has been removed. Instead, use or bson
, and
specify a version or version range to be imported:
find_package(bson 1.30...2.0)
The new package imports different target names:
mongo::bson_static
→bson::static
mongo::bson_shared
→bson::shared
- The target
bson::bson
is a shim target that points to either the shared library or the static library.
Removals
bson_as_json
andbson_array_as_json
are removed due to producing non-portable Legacy Extended JSON. Prefer Canonical Extended JSON or Relaxed Extended JSON for portability. To continue using Legacy Extended JSON, usebson_as_legacy_extended_json
andbson_array_as_legacy_extended_json
.- Compiling with
BSON_MEMCHECK
defined now has no effect. - Remove deprecated integral comparison interfaces:
bson_in_range_*
andbson_cmp_*
. - Remove deprecated atomic and threading interfaces:
bson_atomic_*
andbson_thrd_yield
. - The deprecated
ENABLE_EXTRA_ALIGNMENT
CMake option is removed.bson_t
andbson_iter_t
are now aligned to the size of a pointer instead of128
.bson_error_t
,bson_value_t
, andbson_visitor_t
are now aligned to the size of a pointer instead of8
.BSON_ALIGNED_BEGIN
andBSON_ALIGNED_END
now unconditionally apply their requested alignment.
- Remove deprecated
bson_copy_to_excluding
. Usebson_copy_to_excluding_noinit
instead.
libmongoc
New Features
- Support aggregate operations with
$lookup
stage for In-Use Encryption.
Notes
- In a future minor release the minimum supported MongoDB Server version will be raised from 4.0 to 4.2. This is in accordance with MongoDB Software Lifecycle Schedules.
- Raise required version of libmongocrypt to 1.13.0 to support In-Use Encryption (corresponds to the CMake option:
ENABLE_CLIENT_SIDE_ENCRYPTION
).
Changes
- Passing
batchSize:0
as an option tomongoc_client_watch
,mongoc_database_watch
, ormongoc_collection_watch
now appliesbatchSize:0
to theaggregate
command. Useful to request an immediate cursor. Previously the value
was ignored. bson_oid_init_sequence
is removed. Usebson_oid_init
instead.mongoc_server_description_host
changes the return type frommongoc_host_list_t *
toconst mongoc_host_list_t *
.- URI authentication credentials validation (only applicable during creation of a new
mongoc_uri_t
object from a connection string):- The requirement that a username is non-empty when specified is now enforced regardless of authentication mechanism.
- Username and password specification requirements are now validated and returns a client error for the specified authentication mechanism.
- e.g. it is a client error to not specify a username or a password for SCRAM-SHA-1, SCRAM-SHA-256, and PLAIN.
- e.g. it is a client error to specify a password for MONGODB-X509.
- e.g. it is a client error to specify a username or a password without the other for MONGODB-AWS.
authSource
is now correctly defaulted to"$external"
for MONGODB-AWS (instead of the database name or"admin"
).authMechanism
is now validated and returns a client error for invalid or unsupported values.authMechanismProperties
is now validated and returns a client error for invalid or unsupported properties for the specified authentication mechanism.authMechanismProperties
now correctly supports':'
within property values.- Old behavior:
authMechanismProperties=A:B,C:D:E,F:G
is parsed as{'A': 'B', 'C': 'D:E,F:G'}
. - New behavior:
authMechanismProperties=A:B,C:D:E,F:G
is parsed as{'A': 'B': 'C': 'D:E', 'F': 'G'}
.
- Old behavior:
- Calling
mongoc_bulk_operation_execute
on the samemongoc_bulk_operation_t
repeatedly is an error. Previously this was only discouraged in documentation. - Consistently apply
__cdecl
calling convention to function declarations in public API. Intended to support consumers building their code using a different default calling convention with MSVC. The mongoc and bson libraries only support being built with the__cdecl
default calling convention. mongoc_client_set_ssl_opts
now ignores a pooledmongoc_client_t
and logs an error. Usemongoc_client_pool_set_ssl_opts
to set TLS options on amongoc_client_pool_t
before popping any clients.mongoc_client_set_ssl_stream_initiator
now ignores a pooledmongoc_client_t
and logs an error.- The pkg-config files
libmongoc-1.0
,libmongoc-static-1.0
,libbson-1.0
, andlibbson-static-1.0
have been renamed tomongoc2
,mongoc2-static
,bson2
, andbson2-static
, respectively.
CMake Packages and Imported Targets
The mongoc-1.0
(and bson-1.0
) CMake packages have been removed. Instead, use
mongoc
or bson
, and specify a version or version range to be imported:
find_package(mongoc 1.30...2.0)
The new packages import different target names:
mongo::mongoc_static
→mongoc::static
mongo::mongoc_shared
→mongoc::shared
- The target
mongoc::mongoc
is a shim target that points to either the shared library or the static library.
The BSON library has had similar name changes.
Removals
- The
bson_md5_t
struct and associated API is removed. - The client side matching feature,
mongoc_matcher_t
and related functions are removed. mongoc_server_description_ismaster
is removed. Use the equivalentmongoc_server_description_hello
instead.MONGOC_QUERY_SLAVE_OK
is removed. Use the equivalentMONGOC_QUERY_SECONDARY_OK
instead.MONGOC_URI_SLAVEOK
is removed. It was unused.mongoc_client_command
,mongoc_database_command
, andmongoc_collection_command
are removed. Usemongoc_client_command_simple
,mongoc_database_command_simple
, andmongoc_collection_command_simple
instead.MONGOC_URI_MAXIDLETIMEMS
andMONGOC_URI_WAITQUEUEMULTIPLE
are removed. They were unused.bson_string_t
and associated functions are removed.- Support for
ENABLE_SASL=CYRUS
on Windows is removed. UseENABLE_SASL=SSPI
orENABLE_SASL=OFF
instead.- The associated Windows-only option
CYRUS_PLUGIN_PATH_PREFIX
is removed.
- The associated Windows-only option
- Support for the deprecated
minPoolSize
URI option is removed along with associated API:MONGOC_URI_MINPOOLSIZE
andmongoc_client_pool_min_size
. - Support for LibreSSL (the CMake option
ENABLE_SSL=LIBRESSL
) is removed. Associated API is removed (MONGOC_ENABLE_SSL_LIBRESSL
andmongoc_stream_tls_libressl_new
). MONGOC_WRITE_CONCERN_W_ERRORS_IGNORED
(value -1) is removed. UseMONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED
(value 0) which is handled equivalently. If specified in a URI, replace:mongodb://host/?w=-1
withmongodb://host/?w=0
.- The deprecated CMake option
ENABLE_AUTOMATIC_INIT_AND_CLEANUP
is removed. See Initialization and cleanup for expected use ofmongoc_init()
andmongoc_cleanup()
. mongoc_client_get_database_names
is removed. Usemongoc_client_get_database_names_with_opts
instead.mongoc_client_find_databases
is removed. Usemongoc_client_find_databases_with_opts
instead.mongoc_client_get_max_message_size
is removed.mongoc_client_get_max_bson_size
is removed.- Deprecated
mongoc_apm_command_*_get_server_connection_id
functions are removed. Usemongoc_apm_command_*_get_server_connection_id_int64
instead. - Deprecated index management API is removed:
mongoc_collection_create_index_with_opts
,mongoc_collection_create_index
, andmongoc_collection_ensure_index
are removed. Usemongoc_collection_create_indexes_with_opts
instead.mongoc_index_opt_t
,mongoc_index_opt_geo_t
mongoc_index_opt_wt_t
are removed. Pass options usingbson_t
tomongoc_collection_create_indexes_with_opts
instead.mongoc_collection_find_indexes
is removed. Usemongoc_collection_find_indexes_with_opts
instead.- See MongoDB documentation for working with indexes.
- Deprecated cursor API is removed:
mongoc_cursor_is_alive
is removed. Use the equivalentmongoc_cursor_more
instead.mongoc_cursor_set_hint
is removed. Use the equivalentmongoc_cursor_set_server_id
instead.mongoc_cursor_get_hint
is removed. Use the equivalentmongoc_cursor_get_server_id
instead.mongoc_cursor_new_from_command_reply
is removed. Usemongoc_cursor_new_from_command_reply_with_opts
instead.
- Deprecated CRUD API is removed:
mongoc_collection_save
is removed. Usemongoc_collection_insert_one
ormongoc_collection_replace_one
instead.mongoc_collection_delete
is removed. Usemongoc_collection_delete_one
ormongoc_collection_delete_many
instead.mongoc_delete_flags_t
andmongoc_reply_flags_t
are removed.mongoc_collection_find
is removed. Usemongoc_collection_find_with_opts
instead.mongoc_collection_insert_bulk
is removed. Usemongoc_collection_insert_many
instead.mongoc_collection_create_bulk_operation
is removed. Usemongoc_collection_create_bulk_operation_with_opts
instead.mongoc_collection_get_last_error
is removed. To get results from write operations, instead use:mongoc_collection_update_one
mongoc_collection_update_many
mongoc_collection_replace_one
mongoc_collection_delete_one
mongoc_collection_delete_many
mongoc_collection_insert_one
mongoc_collection_insert_many
mongoc_bulkwrite_t
mongoc_bulk_operation_t
mongoc_bulk_operation_delete
is removed. Usemongoc_bulk_operation_remove()
instead.mongoc_bulk_operation_delete_one
is removed. Usemongoc_bulk_operation_remove_one
instead.mongoc_bulk_operation_get_hint
is removed. Usemongoc_bulk_operation_get_server_id
instead.mongoc_bulk_operation_set_hint
is removed. Usemongoc_bulk_operation_set_server_id
instead.mongoc_collection_count
andmongoc_collection_count_with_opts
are removed. Usemongoc_collection_count_documents
ormongoc_collection_estimated_document_count
instead.
mongoc_collection_stats
is removed. Use the $collStats aggregation pipeline stage withmongoc_collection_aggregate
instead.mongoc_collection_validate
is removed. Run the validate command directly withmongoc_client_read_command_with_opts
instead.- Deprecated API for
mongoc_database_t
is removed:mongoc_database_find_collections
is removed. Usemongoc_database_find_collections_with_opts
instead.mongoc_database_get_collection_names
is removed. Usemongoc_database_get_collection_names_with_opts
instead.
- Deprecated GridFS API has been removed:
mongoc_gridfs_find
is removed. Usemongoc_gridfs_find_with_opts
instead.mongoc_gridfs_find_one
is removed. Usemongoc_gridfs_find_one_with_opts
instead.
- Deprecated TLS stream API is removed:
mongoc_stream_tls_do_handshake
is removed. Usemongoc_stream_tls_handshake
instead.mongoc_stream_tls_check_cert
is removed. Usemongoc_stream_tls_handshake
instead.mongoc_stream_tls_new
is removed. Usemongoc_stream_tls_new_with_hostname
instead.
- Deprecated URI API has been removed:
mongoc_uri_get_service
is removed. Usemongoc_uri_get_srv_hostname
instead.mongoc_uri_get_read_prefs
is removed. Usemongoc_uri_get_read_prefs_t
instead.mongoc_uri_get_ssl
is removed. Usemongoc_uri_get_tls
instead.
- Deprecated write concern API is removed:
mongoc_write_concern_get_fsync
is removed. Usemongoc_write_concern_get_journal
instead.mongoc_write_concern_set_fsync
is removed. Usemongoc_write_concern_set_journal
instead.
- The
libmongoc-ssl-1.0
pkg-config file has been removed.
Forwarding headers (#include <bson.h>
and #include <mongoc.h>
)
The compatibility "forwarding" headers have been removed (previously added in 1.13.0). This means it is no longer valid to include the literal header names mongoc.h
or bson.h
directly:
#include <bson.h> // No longer provided!
#include <mongoc.h> // No longer provided!
Instead, the names must be prefixed with the parent directory: mongoc/mongoc.h
and bson/bson.h
:
#include <bson/bson.h>
#include <mongoc/mongoc.h>
mongoc_client_kill_cursor
mongoc_client_kill_cursor
is removed. It did not accept a server identifier. It was only reliable when connected to a single server.
Sending killCursors is not typically needed. mongoc_cursor_t
manages the cursor lifetime. If needed, use a generic command helper to manually send a killCursors
command:
bson_t *cmd = BCON_NEW ("killCursors", "coll", "cursors", "[", BCON_INT64 (cursor_id), "]");
bool ok = mongoc_client_command_simple_with_server_id (client, "db", cmd, NULL, server_id, NULL, &error);
if (!ok) {
printf ("Failed to send 'killCursors': %s\n", error.message);
}
bson_destroy (cmd);
mongoc_client_get_server_status
mongoc_client_get_server_status
is removed. Use a command helper to run the "serverStatus" command instead:
bson_t *cmd = BCON_NEW("serverStatus", BCON_INT32(1));
if (!mongoc_client_command_simple(client, "db", cmd, NULL, &reply, &error)) {
printf("Failed to send 'serverStatus': %s\n", error.message);
} else {
// TODO: use `reply`
}
bson_destroy(&reply);
bson_destroy(cmd);
Links
v1 support notice
New features will no longer be added to the 1.x versions. Critical bug fixes and security patches will continue to be backported to 1.x versions until April 1, 2026. After this date, 1.x versions will not be maintained.
Contributors
Thanks to everyone who contributed to this release.
- Kevin Albertson
- Ezra Chung
- Colby Pike
- Micah Scott
- Jeroen Ooms
- Lin Raymond