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_SIZEis reduced from504to503to reserve the final byte for internal use.- The data layout of
bson_error_tremains otherwise unchanged: the size is still 512 bytes and the offset of the.code,.domain, and.messagedata members remain unchanged.
- The data layout of
- The pkg-config files
libbson-1.0andlibbson-static-1.0have 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::staticmongo::bson_shared→bson::shared- The target
bson::bsonis a shim target that points to either the shared library or the static library.
Removals
bson_as_jsonandbson_array_as_jsonare 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_jsonandbson_array_as_legacy_extended_json.- Compiling with
BSON_MEMCHECKdefined 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_ALIGNMENTCMake option is removed.bson_tandbson_iter_tare now aligned to the size of a pointer instead of128.bson_error_t,bson_value_t, andbson_visitor_tare now aligned to the size of a pointer instead of8.BSON_ALIGNED_BEGINandBSON_ALIGNED_ENDnow unconditionally apply their requested alignment.
- Remove deprecated
bson_copy_to_excluding. Usebson_copy_to_excluding_noinitinstead.
libmongoc
New Features
- Support aggregate operations with
$lookupstage 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:0as an option tomongoc_client_watch,mongoc_database_watch, ormongoc_collection_watch
now appliesbatchSize:0to theaggregatecommand. Useful to request an immediate cursor. Previously the value
was ignored. bson_oid_init_sequenceis removed. Usebson_oid_initinstead.mongoc_server_description_hostchanges 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_tobject 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.
authSourceis now correctly defaulted to"$external"for MONGODB-AWS (instead of the database name or"admin").authMechanismis now validated and returns a client error for invalid or unsupported values.authMechanismPropertiesis now validated and returns a client error for invalid or unsupported properties for the specified authentication mechanism.authMechanismPropertiesnow correctly supports':'within property values.- Old behavior:
authMechanismProperties=A:B,C:D:E,F:Gis parsed as{'A': 'B', 'C': 'D:E,F:G'}. - New behavior:
authMechanismProperties=A:B,C:D:E,F:Gis parsed as{'A': 'B': 'C': 'D:E', 'F': 'G'}.
- Old behavior:
- Calling
mongoc_bulk_operation_executeon the samemongoc_bulk_operation_trepeatedly is an error. Previously this was only discouraged in documentation. - Consistently apply
__cdeclcalling 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__cdecldefault calling convention. mongoc_client_set_ssl_optsnow ignores a pooledmongoc_client_tand logs an error. Usemongoc_client_pool_set_ssl_optsto set TLS options on amongoc_client_pool_tbefore popping any clients.mongoc_client_set_ssl_stream_initiatornow ignores a pooledmongoc_client_tand logs an error.- The pkg-config files
libmongoc-1.0,libmongoc-static-1.0,libbson-1.0, andlibbson-static-1.0have 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::staticmongo::mongoc_shared→mongoc::shared- The target
mongoc::mongocis 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_tstruct and associated API is removed. - The client side matching feature,
mongoc_matcher_tand related functions are removed. mongoc_server_description_ismasteris removed. Use the equivalentmongoc_server_description_helloinstead.MONGOC_QUERY_SLAVE_OKis removed. Use the equivalentMONGOC_QUERY_SECONDARY_OKinstead.MONGOC_URI_SLAVEOKis removed. It was unused.mongoc_client_command,mongoc_database_command, andmongoc_collection_commandare removed. Usemongoc_client_command_simple,mongoc_database_command_simple, andmongoc_collection_command_simpleinstead.MONGOC_URI_MAXIDLETIMEMSandMONGOC_URI_WAITQUEUEMULTIPLEare removed. They were unused.bson_string_tand associated functions are removed.- Support for
ENABLE_SASL=CYRUSon Windows is removed. UseENABLE_SASL=SSPIorENABLE_SASL=OFFinstead.- The associated Windows-only option
CYRUS_PLUGIN_PATH_PREFIXis removed.
- The associated Windows-only option
- Support for the deprecated
minPoolSizeURI option is removed along with associated API:MONGOC_URI_MINPOOLSIZEandmongoc_client_pool_min_size. - Support for LibreSSL (the CMake option
ENABLE_SSL=LIBRESSL) is removed. Associated API is removed (MONGOC_ENABLE_SSL_LIBRESSLandmongoc_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=-1withmongodb://host/?w=0.- The deprecated CMake option
ENABLE_AUTOMATIC_INIT_AND_CLEANUPis removed. See Initialization and cleanup for expected use ofmongoc_init()andmongoc_cleanup(). mongoc_client_get_database_namesis removed. Usemongoc_client_get_database_names_with_optsinstead.mongoc_client_find_databasesis removed. Usemongoc_client_find_databases_with_optsinstead.mongoc_client_get_max_message_sizeis removed.mongoc_client_get_max_bson_sizeis removed.- Deprecated
mongoc_apm_command_*_get_server_connection_idfunctions are removed. Usemongoc_apm_command_*_get_server_connection_id_int64instead. - Deprecated index management API is removed:
mongoc_collection_create_index_with_opts,mongoc_collection_create_index, andmongoc_collection_ensure_indexare removed. Usemongoc_collection_create_indexes_with_optsinstead.mongoc_index_opt_t,mongoc_index_opt_geo_tmongoc_index_opt_wt_tare removed. Pass options usingbson_ttomongoc_collection_create_indexes_with_optsinstead.mongoc_collection_find_indexesis removed. Usemongoc_collection_find_indexes_with_optsinstead.- See MongoDB documentation for working with indexes.
- Deprecated cursor API is removed:
mongoc_cursor_is_aliveis removed. Use the equivalentmongoc_cursor_moreinstead.mongoc_cursor_set_hintis removed. Use the equivalentmongoc_cursor_set_server_idinstead.mongoc_cursor_get_hintis removed. Use the equivalentmongoc_cursor_get_server_idinstead.mongoc_cursor_new_from_command_replyis removed. Usemongoc_cursor_new_from_command_reply_with_optsinstead.
- Deprecated CRUD API is removed:
mongoc_collection_saveis removed. Usemongoc_collection_insert_oneormongoc_collection_replace_oneinstead.mongoc_collection_deleteis removed. Usemongoc_collection_delete_oneormongoc_collection_delete_manyinstead.mongoc_delete_flags_tandmongoc_reply_flags_tare removed.mongoc_collection_findis removed. Usemongoc_collection_find_with_optsinstead.mongoc_collection_insert_bulkis removed. Usemongoc_collection_insert_manyinstead.mongoc_collection_create_bulk_operationis removed. Usemongoc_collection_create_bulk_operation_with_optsinstead.mongoc_collection_get_last_erroris removed. To get results from write operations, instead use:mongoc_collection_update_onemongoc_collection_update_manymongoc_collection_replace_onemongoc_collection_delete_onemongoc_collection_delete_manymongoc_collection_insert_onemongoc_collection_insert_manymongoc_bulkwrite_tmongoc_bulk_operation_t
mongoc_bulk_operation_deleteis removed. Usemongoc_bulk_operation_remove()instead.mongoc_bulk_operation_delete_oneis removed. Usemongoc_bulk_operation_remove_oneinstead.mongoc_bulk_operation_get_hintis removed. Usemongoc_bulk_operation_get_server_idinstead.mongoc_bulk_operation_set_hintis removed. Usemongoc_bulk_operation_set_server_idinstead.mongoc_collection_countandmongoc_collection_count_with_optsare removed. Usemongoc_collection_count_documentsormongoc_collection_estimated_document_countinstead.
mongoc_collection_statsis removed. Use the $collStats aggregation pipeline stage withmongoc_collection_aggregateinstead.mongoc_collection_validateis removed. Run the validate command directly withmongoc_client_read_command_with_optsinstead.- Deprecated API for
mongoc_database_tis removed:mongoc_database_find_collectionsis removed. Usemongoc_database_find_collections_with_optsinstead.mongoc_database_get_collection_namesis removed. Usemongoc_database_get_collection_names_with_optsinstead.
- Deprecated GridFS API has been removed:
mongoc_gridfs_findis removed. Usemongoc_gridfs_find_with_optsinstead.mongoc_gridfs_find_oneis removed. Usemongoc_gridfs_find_one_with_optsinstead.
- Deprecated TLS stream API is removed:
mongoc_stream_tls_do_handshakeis removed. Usemongoc_stream_tls_handshakeinstead.mongoc_stream_tls_check_certis removed. Usemongoc_stream_tls_handshakeinstead.mongoc_stream_tls_newis removed. Usemongoc_stream_tls_new_with_hostnameinstead.
- Deprecated URI API has been removed:
mongoc_uri_get_serviceis removed. Usemongoc_uri_get_srv_hostnameinstead.mongoc_uri_get_read_prefsis removed. Usemongoc_uri_get_read_prefs_tinstead.mongoc_uri_get_sslis removed. Usemongoc_uri_get_tlsinstead.
- Deprecated write concern API is removed:
mongoc_write_concern_get_fsyncis removed. Usemongoc_write_concern_get_journalinstead.mongoc_write_concern_set_fsyncis removed. Usemongoc_write_concern_set_journalinstead.
- The
libmongoc-ssl-1.0pkg-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