MongoDB · What's New

MongoDB 9.0 at a glance:
performance, security, observability, and what to know before upgrading

MongoDB 9.0 was released on September 29, 2026, covering Atlas, Enterprise Advanced, Community Edition and self-managed environments. This post goes through its main changes by theme, and tags each one as a server capability available everywhere, Atlas-only, or Enterprise Advanced-only. A final section collects the compatibility changes and known issues listed in the release notes, to help you decide when to upgrade.

9.0
MongoDB major release
Released2026-09-29
Latest patch9.0.4 · 2026-10-13
Upgrade paths in the docs8.0 → 9.0
8.3 → 9.0

Claimed maximum gains over 8.0

Transaction throughput
+20%
find-one queries
+35%
update-one queries
+30%

Figures are from MongoDB's internal testing (9.0 vs 8.0, using public benchmark methodologies). All are "up to" values and vary with workload, deployment, hardware and configuration — they don't predict results in your own environment.

01 · Performance & Resource Governance

Faster, and with firmer boundaries

Alongside the speedups, 9.0 puts explicit resource limits on single operations and concurrent transactions, making it harder for one runaway query to drag down a whole server.

SERVERavailable on all deployments ATLASAtlas only ENTERPRISE ADV.Enterprise Advanced only
20%
Transaction throughput, up to
vs 8.0
35%
find-one, up to
vs 8.0
30%
update-one, up to
vs 8.0
≈2×
Large-deployment throughput
workload and scale not specified
SERVER

Per-operation memory limit

A single query operation is capped at the greater of 1 GB or 20% of server memory. Operations that exceed it fail with errors such as ExceededMemoryLimit (146). The 100 MB per-stage limit and spill-to-disk behavior are unchanged.

SERVER

Open transaction limit

maxConcurrentMultiDocumentTransactions defaults to 10000. Beyond that, new transactions from external clients fail with TooManyOpenTransactions.

SERVER

Expression memory in explain

At executionStats and above, explain reports expressionEvaluationPeakMemoryBytes for stages such as $project, $lookup and $match, helping you find memory-hungry expressions.

Read the numbers carefully

Every percentage above is an "up to" value from MongoDB's internal testing, and the "nearly 2x throughput on large deployments" claim comes with no stated workload or scale. The most reliable way to know whether upgrading pays off is to run your own workload against it in a test environment.

02 · Queries & Aggregation

Finer control over individual query shapes

9.0 lets you tune a particular class of query without changing application code, and extends query statistics from reads to writes.

SERVER

Command-level querySettings

find, distinct and aggregate accept a querySettings document that applies only to that execution and isn't stored on the cluster. If the query shape already has cluster-level settings, the two are merged, and the stored setting wins on conflicts.

SERVER · FCV 9.0

queryKnobs

A new query setting that overrides internal server parameters for a single query shape. Requires feature compatibility version (FCV) 9.0 or later.

SERVER · FCV 9.0

Per-shape maxTimeMS

Set a time limit for one query shape through setQuerySettings, without editing every call site. Also requires FCV 9.0 or later.

SERVER

$queryStats covers writes

Statistics now include update, insert and delete, with new fields such as metrics.cursor, metrics.queryExec, metrics.queryPlanner and metrics.writes. Enabled by default, sampling 1% of reads and of writes.

SERVER

Server-side JavaScript is back

$accumulator, $function and $where, deprecated in 8.0, are re-enabled on a WebAssembly-based engine with stronger sandboxing. Not available on ppc64le.

Look at statistics aggregated by query shape (default sampling is 1%, so figures are estimates)
// $queryStats must be run against the admin database
db.getSiblingDB("admin").aggregate([
  { $queryStats: {} }
])
03 · Security

String queries on encrypted data

The headline security change in 9.0 is Queryable Encryption's support for string queries, plus a set of additions around authentication, auditing and Atlas network connectivity.

Server SERVER

  • Queryable Encryption is generally available for prefix, suffix and substring queries on encrypted string fields — partial matching while the data stays encrypted. mongosh needs the 9.0+ Automatic Encryption Shared Library specified with --cryptSharedLibPath
  • mongocryptd is deprecated — use the Automatic Encryption Shared Library instead
  • useInternalAuthzForX509: when true, MONGODB-X509 clients use internal authorization even if LDAP authorization is configured
  • New audit log fields: directRemote and direct_endpoint record the literal TCP peer, independent of any PROXY protocol header

Atlas ATLAS

  • AWS PrivateLink cross-region connectivity: private connections between applications and Atlas clusters across AWS Regions, with no public internet exposure
  • Google Private Service Connect port mapping: reach multiple database nodes through a single endpoint
  • Azure Key Vault secretless authentication: encryption at rest uses an Atlas-managed service principal, so no long-lived credentials are stored in Atlas
  • Google Trust Services: added as a certificate authority for TLS
04 · Observability

Less guessing, more evidence

9.0 adds a large set of new server metrics, while Atlas gets improvements to its UI and to how data leaves the platform.

New server metrics SERVER

  • serverStatus gains many new metrics, including changeStreams.*, repl.network.bytesSent, operation.writeConflictRetry*, query.* and shardingStatistics.*
  • Change stream cursor metrics: cursor.open.total, cursor.open.pinned, cursor.totalOpened, cursor.lifespan
  • Initial sync metrics: replSetGetStatus.initialSyncStatus adds phase, totalAttempts and bytesPerSecond
  • Geo key-extraction errors get named codes 510 and 511, and failed writes carry the failing path and reason

Atlas enhancements ATLAS

  • Native OpenTelemetry integration: stream metrics, logs and Atlas activity events to any OpenTelemetry-compatible platform; the announcement names Datadog, New Relic, Dynatrace, Prometheus/Grafana, Google Cloud, Azure and AWS CloudWatch. Configurable in the Atlas UI or with Terraform
  • Redesigned Metrics UI: one unified cluster-level view, filterable by shard, node and time range
  • Query Shape Insights for writes: per-shape metrics for inserts, updates and deletes, helping spot unindexed updates and deletes. On 9.0 it uses a 1% random sample, so displayed totals are about 1% of actual volume and rarely run shapes may not appear
05 · Operations & Resilience

Traffic spikes, backups and sharding operations

Most changes in this group land on Atlas and Enterprise Advanced, but the server also gains a few sharding operations tools.

ATLAS

Intelligent Workload Management

A managed availability capability for overloaded clusters: it queues transient traffic spikes, keeps short operations moving and long ones stable, and throttles excess requests only as a last resort — buying auto-scaling or operators time to act.

ENTERPRISE ADV.

S3 backups on a direct data path

Backups bypass the Ops Manager control plane and use a direct data path, which MongoDB says is faster. Immutable, portable point-in-time restore (PITR) chains in S3 are also offered.

ATLAS

Restores & maintenance

Database- and collection-level restores, improved snapshot management, and customizable maintenance waves.

SERVER

Shard draining status

mongosh adds sh.shardDrainingStatus() and sh.getTransitionToDedicatedConfigServerStatus() to follow shard draining and the move to a dedicated config server.

SERVER

checkMetadataConsistency

Detects more inconsistency types, and adds performStrictChunkChecksIfBelowThreshold: below a chunk-count threshold it does a full comparison, at or above it only compares counts.

ATLAS

Gen2 compute

Gen2 is available on M30+ dedicated clusters on AWS and GCP, with MongoDB citing better price-performance and more flexible storage and IOPS controls.

06 · The Data Layer

Time series and validation

This group affects how you design data and constraints, and it's also the part that needs the most attention during an upgrade.

SERVER

How time series collections are stored

Time series collections are stored as a single namespace of compressed buckets and are no longer writable non-materialized views. renameCollection now works on them.

SERVER

BSON validated by default

The server validates all ingested BSON and returns an error for invalid BSON.

SERVER

New constraint validation level

Validation rules apply to all inserts and updates, and every existing document must satisfy them. Useful when you want to bake the application's expectations about data into the database.

07 · Before You Upgrade

Get these things straight before going live

What follows is compiled from the 9.0 release notes. The status of known issues changes with patch releases, so check the latest official release notes before you upgrade.

Compatibility changes

  • BSON validated by default: invalid BSON that used to be accepted now returns an error
  • Deprecated: net.wireObjectCheck, --objcheck / --noobjcheck, and mongocryptd
  • Removed: the ShardCatalogCacheCollectionMetadataMismatch inconsistency type
  • Renamed: shardingStatistics.databaseVersionUpdateCounters is now databaseShardingMetadataStatistics; metrics.changeStreams.showExpandedEvents moves under option.. Update any monitoring scripts that reference the old names
  • Time series: with more than 5,000 time series collections in one database, the upgrade can be slower and may add write-latency spikes. Dropping unneeded collections helps

Suggested actions around the upgrade

  • Rehearse in a test environment with a real workload to validate performance and compatibility before choosing a production date
  • Back up before upgrading, and confirm the restore procedure works
  • Record your pre-upgrade monitoring baseline — replication lag, slow queries, connections — and compare afterwards
  • Watch the patch releases: 9.0.4 (2026-10-13) fixes several CVEs and stability issues
  • Raise FCV deliberately: some new features (such as queryKnobs) need FCV 9.0, so don't rush to raise it all at once
IssueImpactWorkaround in the release notes
SERVER-136226 From 9.0.0, nodes open at least ShardingTaskExecutorPoolMinSize connections to each config server, which can exhaust them If that parameter is greater than 1, set ShardingTaskExecutorPoolMinSizeForConfigServers to 1 before upgrading (dedicated config servers); for embedded config servers, contact MongoDB Support
SERVER-89953 At FCV 9.0, listIndexes reports collation: { locale: "simple" }, which some ODMs (Mongoose, Doctrine ODM, Beanie) read as a definition change; Mongoose's syncIndexes() may then drop and rebuild unchanged indexes Avoid syncIndexes() at startup and use createIndexes() or diffIndexes(); Mongoose 9.10.4 or 8.24.5 fixes it
SERVER-136961 After an unclean shutdown, a node that restarts into a file-copy-based initial sync crashes every time Restart with initialSyncMethod set to logical, or clear dbPath and restart; Atlas users should contact MongoDB Support
WAP Note

Two things are worth doing around any upgrade: take a backup, and compare against your monitoring baseline. Those map directly onto WAP's backup and monitoring modules. For WAP's support status with 9.0 specifically, go by the WAP documentation. Also note that the Atlas Infinite public preview runs the latest 9.x.

ONE LAST THING

A new version is worth looking forward to,
but upgrade at a sensible pace

First work out which features belong to your deployment, then validate in a test environment, then back up, upgrade and compare against your baseline. Take each step solidly and an upgrade stays an upgrade, not an adventure.