Docs Menu
Docs Home
/
MongoDB Manual
/

Release Notes for MongoDB 8.0

On this page

  • Patch Releases
  • Platform Support Updates
  • Logging
  • Aggregation
  • Security
  • Sharding
  • Replication
  • Upgraded TCMalloc
  • General Changes
  • Known Issues
  • Upgrade Procedures
  • Download

This page describes changes and new features introduced in MongoDB 8.0.

MongoDB 8.0 is a Major Release, which means that it is supported for both MongoDB Atlas and on-premises deployments. MongoDB 8.0 includes changes introduced in MongoDB Rapid Releases 7.1, 7.2, and 7.3. This page describes changes introduced in those Rapid Releases and MongoDB 8.0.

To learn more about the differences between Major and Rapid releases, see MongoDB Versioning.

Issues fixed:

  • SERVER-76883 Reduce chattiness of "Role does not exist" logs for externally sourced users

  • SERVER-82221 listCollections and listIndexes should include commit-pending namespaces

  • SERVER-94635 Make session refresh parameters configurable

  • SERVER-95244 Upsert statements which result in an insert may fail with tassert 9146500 when client connects directly to shard

  • WT-13409 One ret in __txn_checkpoint is not handled

  • All Jira issues closed in 8.0.1

  • 8.0.1 Changelog

The rest of this page describes changes and new features introduced in MongoDB 8.0.

Starting in MongoDB 8.0, new MongoDB Server versions (major and minor) support the minimum operating system (OS) minor version defined by the OS vendor. After an OS minor version is no longer supported by the OS vendor, MongoDB updates the MongoDB Server to support the next OS minor version. For details, see MongoDB Platform Support Improvements.

MongoDB 8.0 supports the following minimum OS minor versions:

  • Red Hat Enterprise Linux 8.8

  • Red Hat Enterprise Linux 9.3

  • SUSE Linux Enterprise Server 15 SP5

  • Amazon Linux 2023 version 2023.3

Starting in MongoDB 8.0, you can configure the Database Profiler to log slow operations based on the time that MongoDB spends working on that operation, rather than the total latency for the operation. This means that factors such as waiting for locks and flow control do not affect whether an operation exceeds the slow operation threshold.

This change provides the following improvements for logging and query analysis:

  • Slow queries are logged more accurately based on the time MongoDB spends processing the query.

  • Query analysis tools such as the Query Profiler, Performance Advisor, and Search Query Telemetry report slow operations based on workingMillis instead of durationMillis. This change provides a more accurate view of problematic queries.

  • Slow query logs include a metric for the time queued on execution tickets, queues.execution.totalTimeQueuedMicros. This metric helps identify whether an operation is slow because of the time it takes to complete, or the time it spends waiting to start.

For more information, see db.setProfilingLevel().

When you specify a filter for the database profiler, you can log operations based on the new workingMillis metric. You can log operations based on both workingMillis and durationMillis and set each metric to a different threshold.

Starting in MongoDB 8.0, you can use the $convert operator to perform the following conversions:

  • String values to binData values

  • binData values to string values

MongoDB 8.0 also includes a new helper expression, $toUUID, which provides simplified syntax for converting strings to UUID values.

Starting in MongoDB 7.1, the $queryStats stage returns statistics for recorded queries.

Starting in MongoDB 8.0, $queryStats improves tracking and reporting metrics for change streams. For more information, see $queryStats Change Streams Behavior.

Starting in MongoDB 8.0, null and missing field values in $denseRank and $rank sortBy operations are treated the same when calculating rankings. This change makes the behavior of denseRank and rank consistent with $sort.

Starting in MongoDB 8.0, Queryable Encryption supports range queries on encrypted fields using the $lt, $lte, $gt, and $gte operators. For details, see Supported Operations for Queryable Encryption. To enable range queries on encrypted fields, see Create an Encryption Schema.

Starting in MongoDB 8.0, you can specify the OCSF schema for audit log messages. The OCSF schema provides logs in a standardized format compatible with log processors.

To set the schema used for log messages, use the auditLog.schema configuration file option.

For example log messages in OCSF format, see OCSF Schema Audit Messages.

MongoDB 8.0 introduces a new queue for ingress admission control. Operations that wait for entry into the database from the network enter the ingress queue. By default, the queue is unrestricted, meaning that MongoDB allows all operations to execute through this stage without any queueing. Setting the queue maximum to a specific value allows you to queue operations at this stage if the number of oncurrent operations reaches the specified limit.

Starting in MongoDB 8.0, you can move collections between shards and unshard collections on sharded clusters.

Starting in MongoDB 8.0, you can move an unsharded collection to a different shard using the moveCollection command.

For details, see Moveable Collections. To get started, see Move a Collection.

Starting in MongoDB 8.0, movePrimary doesn't invalidate collections that have change streams. The change streams can continue to read events from collections after the collections are moved to a new shard.

For details, see Moving Collections that have Change Streams.

Starting in MongoDB 8.0, you can unshard existing sharded collections with the unshardCollection command or the sh.unshardCollection() method. This operation moves all documents in the collection onto a specified shard or the shard with the least amount of data.

For details, see Unsharded Collections. To get started, see Unshard a Collection.

Starting in MongoDB 8.0, you can configure a config server to store your application data in addition to the usual sharded cluster metadata. A mongod node that provides both config server and shard server functionality is called a config shard. A mongod node that runs as a standalone --configsvr without shard server functionality is called a dedicated config server.

To configure a dedicated config server to run as a config shard, run the transitionFromDedicatedConfigServer command.

To configure a config shard to run as a dedicated config server, run the transitionToDedicatedConfigServer command.

For details, see Config Shard. To get started, see Start a Sharded Cluster with a Config Shard. To convert a replica set to a sharded cluster with a config shard, see Convert a Replica Set to a Sharded Cluster with an Embedded Config Server.

Starting in MongoDB 8.0, serverStatus includes the following new shardingStatistics fields in its output:

MongoDB 7.1 includes the following new sharding statistics for chunk migrations:

Starting in MongoDB 7.2, when you shard an empty collection with a hashed shard key, the operation creates one chunk per shard by default. Previously, the operation created two chunks by default.

Starting in MongoDB 8.0, you can use the directShardOperations role to perform maintenance operations that require you to execute commands directly against a shard.

Warning

Running commands using the directShardOperations role can cause your cluster to stop working correctly and may cause data corruption. Only use the directShardOperations role for maintenance purposes or under the guidance of MongoDB support. Once you are done performing maintenance operations, stop using the directShardOperations role.

Starting in MongoDB 7.1, mongos supports exhaust cursors when a client's getMore request sets the exhaustAllowed flag. This can improve query performance on sharded clusters when the client receives multiple replies from the database server for a single request.

Starting in MongoDB 7.1, mongos accepts --port values from [0, 65535]. For more information, see --port.

Starting in MongoDB 7.1, findAndModify and deleteOne() can use a partial shard key to query on a sharded collection.

MongoDB 7.2 introduces significant performance improvements in reshard collection operations, substantially reducing the amount of time the operation takes to run.

Additionally, if your application and cluster meet the necessary requirements and limitations, you can reshard the collection on the same key using the reshardCollection command to redistribute your collection, which is much faster than alternative range migration procedure.

The following options are added to the command:

Field
Description
forceRedistribution
Enables same-key resharding.

For examples, see Redistribute Data to New Shards.

Starting in MongoDB 7.1, the fsync and fsyncUnlock commands can perform fsync operations on sharded clusters.

When run on mongos with the lock field set to true, the fsync command flushes writes from the storage layer to disk and locks each shard, preventing additional writes. The fsyncUnlock command can then be used to unlock the cluster.

This feature enables self-managed backups of sharded clusters using mongodump.

Starting in MongoDB 7.1, when using updateOne() with upsert: true on a sharded collection, you do not need to include the full shard key in the filter.

Starting in MongoDB 8.0, you can use the $lookup stage within a transaction while targeting a sharded collection.

Starting in MongoDB 8.0, write operations that use the "majority" write concern return an acknowledgment when the majority of replica set members have written the oplog entry for the change. This improves the performance of "majority" writes. In previous releases, these operations would wait and return an acknowledgment after the majority of replica set members applied the change.

If your application reads from a secondary immediately after receiving an acknowledgment from a { w: "majority" } write operation (without a causally consistent session), the query may return results that don't include changes from the write.

Starting in MongoDB 8.0, the following metrics are available when using the replSetGetStatus command:

Starting in MongoDB 8.0, secondaries write and apply oplog entries for each batch in parallel. A writer thread reads new entries from the primary and writes them to the local oplog. An applier thread asynchronously applies these changes to the local database. This changes increases replication throughput for secondaries.

This introduces a breaking change for metrics.repl.buffer, as it now provides metrics on two buffers instead of one.

MongoDB 8.0 deprecates the following server status metrics:

MongoDB 8.0 adds the following server status metrics:

Starting in MongoDB 8.0, MongoDB uses an upgraded version of TCMalloc that uses per-CPU caches, instead of per-thread caches, to reduce memory fragmentation and make your database more resilient to high-stress workloads.

The new TCMalloc version directly impacts previous production recommendations for Transparent Huge Pages. To learn more, see TCMalloc Performance Optimization for a Self-Managed Deployment.

Starting in MongoDB 8.0, the following new serverStatus metrics report information about tcmalloc usage:

Starting in MongoDB 8.0, Bulk.insert() and data ingestion workloads may perform better. However, shutting down MongoDB immediately after running these workloads might take longer because of the extra data being flushed to disk.

Starting in MongoDB 8.0, you can configure a config server to store application data in addition to the usual sharded cluster metadata. The config server is then known as a config shard. For details, see Config Shards.

Starting in MongoDB 7.3, the compact command includes a new freeSpaceTargetMB option to specify the minimum amount of storage space, in megabytes, that must be recoverable for compaction to proceed.

Starting in MongoDB 8.0, you can use the new autoCompact command to perform background compaction. If enabled, the server attempts to keep free space within each collection and index below the specified the freeSpaceTargetMB value.

If enabled, the compact command returns an estimate of how much space, in bytes, compaction can reclaim from the targeted collection. If you run compact with dryRun set to true, MongoDB only returns the estimated value and does not perform any kind of compaction.

Starting in MongoDB 7.1, when you run multiple DDL operations that target different collections from the same database, MongoDB runs those operations concurrently.

This change adds two new types to the serverStatus locks field and currentOp.locks output:

  • DDLDatabase

  • DDLCollection

Starting in MongoDB 7.2, aggregation pipeline queries that attempt to use non-existent databases on mongos deployments return validation errors.

In previous versions, these aggregation queries return empty cursors.

In MongoDB 8.0, if you add or remove a shard while your cluster executes a DDL operation (operation that modifies a collection such as reshardCollection), any operation that adds or removes a shard only executes after the concurrent DDL operation finishes.

Starting in MongoDB 7.1, an aggregation command will throw an error when a pipeline exceeds the pipeline stage limit. For more details, see Number of Stages Restrictions.

Starting in MongoDB 7.2, you can specify any valid expression that resolves to a string for the field input of the $getField operator. In earlier versions, field accepts only string constants.

Starting in MongoDB 7.1, index builds are improved with faster error reporting and increased failure resilience. You can also set the minimum available disk space required for index builds using the new indexBuildMinAvailableDiskSpaceMB parameter, which stops index builds if disk space is too low.

The following new index build metrics were added:

For full details, see Index Builds.

MongoDB 7.1 adds the auditConfig cluster parameter, which contains information on audit configurations from mongod and mongos server instances.

Starting in MongoDB 8.0, you can use the defaultMaxTimeMS cluster parameter to specify a default time limit for individual read operations to complete.

MongoDB 7.1 adds the indexBuildMinAvailableDiskSpaceMB parameter, which allows you to set the minimum available disk space required for index builds.

Starting in MongoDB 8.0, the tcmallocEnableBackgroundThread is enabled by default. This allows MongoDB to periodically release memory back to the operating system.

Starting in MongoDB 8.0, you can use the new bulkWrite command to perform many insert, update, and delete operations on multiple collections in one request. The existing db.collection.bulkWrite() method only allows you to modify one collection in one request.

MongoDB 8.0 introduces a new query shape. The pre-existing query shape is renamed as the plan cache query shape.

Starting in MongoDB 8.0, you can add query settings for the new query shape. The query optimizer uses the query settings as an additional input during query planning, which affects the plan selected to run a query that has a matching query shape.

Query settings have improved functionality compared to index filters. Index filters are also deprecated starting in MongoDB 8.0, and you should avoid using them.

Starting in MongoDB 8.0, queryShapeHash is included in the following output:

Starting in MongoDB 8.0, the pre-existing queryHash field is renamed to planCacheShapeHash. If you're using an earlier MongoDB version, you'll see queryHash instead of planCacheShapeHash.

Starting in MongoDB 8.0, the getParameter command accepts a setAt field. You can use this field to filter the allParameters: true return document to show only those parameters that you can set at startup or runtime.

Starting in MongoDB 8.0, you can use read concern "snapshot" on capped collections.

Starting in MongoDB 7.1, the serverStatus command output includes the following new metrics:

Starting in MongoDB 7.2, the serverStatus command output includes the following new metrics:

Starting in MongoDB 7.3, the serverStatus command output includes the following new metrics:

Starting in MongoDB 8.0, the updateOne() method supports a sort option. This controls how MongoDB orders the document before it selects the document to receive the update.

Previous releases use the findAndModify() and findOneAndUpdate() methods to update the first document in a user-specified sort order. Support for retryable writes requires these methods to copy the entire document to a special side collection for each node, which is a more expensive operation than the updateOne() method with the new sort option.

Starting in MongoDB 7.1, the hint field is available in the distinct command, allowing you to specify the query's index.

Starting in MongoDB 7.1, you can create TTL indexes on capped collections.

Starting in version 8.0, MongoDB may execute certain time series queries using block processing. This performance improvement processes queries in "blocks" of data, rather than individual values. Block processing improves query execution speed and throughput when working with time series collections.

To see if your time series query uses block processing, check the explain.queryPlanner.winningPlan.slotBasedPlan.stages field in the explain plan output.

To learn more, see Block Processing.

Starting in MongoDB 8.0, a limited set of queries (including _id equality matches) skip regular query planning and execution. Instead, these queries use an optimized index scan plan consisting of one of these plan stages:

  • EXPRESS_CLUSTERED_IXSCAN

  • EXPRESS_DELETE

  • EXPRESS_IXSCAN

  • EXPRESS_UPDATE

For more information on query plans, see Explain Results.

Starting in MongoDB 8.0, rejected query plans only contain the find portion of the query. In previous versions, rejected plans can contain aggregation stages like $group. Those aggregation stages aren't used by the query planner to choose the winning plan, so the rejectedPlans field only contains the portion of the query that was used to choose the winning plan.

This change also ensures that executionStats for rejected plans are non-zero. As a result, you can now see statistics such as how many documents or keys a rejected plan examined.

For more information on rejected query plans, see explain.queryPlanner.rejectedPlans.

Starting in MongoDB 8.0, insert operations for multi-document transactions no longer produce individual oplog entries. Instead, multi-document inserts are batched as a single entry. The change stream insert event for each document has the same clusterTime.

This change increases performance of multi-document insert operations and eliminates possible replication lag caused by multiple oplog writes.

Starting in MongoDB 8.0, when multiple identity providers (IDP) are defined, the oidcIdentityProviders parameter accepts duplicate issuer values as long as the audience value is unique for each issuer. This is also available in versions 7.3 and 7.0.

Starting in MongoDB 8.0, namespaces in subpipelines inside $lookup and $unionWith are validated to ensure the correct use of from and coll fields.

For details, see $lookup subpipelines and $unionWith subpipelines.

This section describes known issues in MongoDB 8.0 and their resolution status.

In Version
Issue
Status
8.0.0
SERVER-94741: When multiple indexes are usable by $or queries that include top-level $and clauses (including implicit $and clauses), the query may use less efficient indexes because the most efficient indexes have been incorrectly removed from consideration during the new "index pruning" phase of query planning in MongoDB 8.0.
Unresolved. Planned to be mitigated in 8.0.1 by disabling the index pruning feature in SERVER-94738.
8.0.0

SERVER-95244: Upsert operations on single-shard sharded clusters may fail more often when all of the following are true:

  • The operation is issued directly to a shard and not to mongos.

  • The upsert operation is exclusively an insert.

  • The namespace is not receiving operations from mongos routers.

  • The namespace is not receiving any other operations.

The recommended process for transitioning to a sharded cluster requires shifting clients to connect to mongos routers. Writes issued to mongos routers are not affected.

This issue is planned to be fixed in 8.0.1.

Important

Feature Compatibility Version

To upgrade to MongoDB 8.0 from a 7.0 deployment, the 7.0 deployment must have featureCompatibilityVersion set to 7.0. To check the version:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

To upgrade to MongoDB 8.0, refer to the upgrade instructions specific to your MongoDB deployment:

If you need guidance on upgrading to 8.0, MongoDB professional services offer major version upgrade support to help ensure a smooth transition without interruption to your MongoDB application. To learn more, see MongoDB Consulting.

To download MongoDB 8.0, go to the MongoDB Download Center.

Back

Release Notes