全部产品
Search
文档中心

云数据库 MongoDB:MongoDB 8.3新特性概览

更新时间:Jul 03, 2026

云数据库 MongoDB 版 8.3 引入了细粒度分片移除命令、执行中慢查询日志、查询级内存追踪和新聚合表达式。本文介绍所有新特性、优化项和行为变更。

完整的社区变更记录请参见 MongoDB 8.3 release notes。

速览

本文将从以下方面介绍云数据库 MongoDB 版 8.3 版本:

MongoDB 8.3 的更多新特性以及优化项,请参见 MongoDB 8.3 release notes。

聚合能力增强

数组索引访问

$map、$filter、$reduce 现在可以引用当前元素的索引。通过 arrayIndexAs 绑定自定义变量名,或使用内置的 $$IDX。

// 为每个元素添加从 1 开始的排名
db.scores.aggregate([
  { $project: {
      ranked: { $map: {
        input: "$items",
        as: "item",
        arrayIndexAs: "i",
        in: { value: "$$item", rank: { $add: ["$$i", 1] } }
      }}
  }}
])

新增表达式

表达式

用途

典型场景

$subtype

返回 BinData 的子类型

区分 UUID 与通用二进制字段

$createObjectId

在管道中生成随机 ObjectId

在 $merge 或 $out 中分配 ID,免去客户端往返

$hash / $hexHash

生成 MD5、SHA-256 或 XXH64 哈希

在服务端计算内容指纹或分区键

$serializeEJSON / $deserializeEJSON

BSON 与扩展 JSON 互转

将存为文本字段的 JSON 字符串解析回带类型的 BSON 值

类型转换增强

  • $toString 现在可以处理 object、array、正则表达式、MaxKey、MinKey 和 timestamp。

  • $convert 新增 base 参数,支持 2、8、10、16 进制的字符串-数值互转。

  • 新增 $toArray(字符串到数组、binData 到数值数组)和 $toObject(字符串到对象)转换。详情参见 Convert binData to Array。

分片管理流程重构

细粒度分片移除

removeShard 已弃用。四个新命令将分片移除拆分为可逆的离散阶段:

阶段

命令

说明

启动

startShardDraining

开始将 chunk 从目标分片迁出

暂停

stopShardDraining

暂停迁移;分片仍留在集群中

查看

shardDrainingStatus

返回迁移进度和剩余 chunk 数

提交

commitShardRemoval

数据迁移完成后确认移除

可以随时暂停和恢复迁移,在维护窗口或突发负载时非常实用。

DDL 路由要求

DDL 操作和 applyOps 必须通过 mongos 路由,不能再直接在分片节点上执行。此变更防止分片集群中的元数据不一致。

监控与诊断增强

执行中慢查询日志

慢查询现在可以在执行期间记录,不仅限于完成后。每条查询在超过阈值时记录一次。

通过 --defaultSlowInProgMS 启动参数或运行时设置阈值:

db.setProfilingLevel(1, { slowms: 100, slowinprogms: 3000 })

日志条目包含 originalQueryShapeHash,可将分片级慢日志关联到 mongos 上的原始请求。

查询级内存追踪

两个新字段出现在 $currentOp、db.currentOp()、profiler、慢查询日志、explain 输出和 PlanCache.list() 中:

字段

说明

inUseTrackedMemBytes

操作当前消耗的内存

peakTrackedMemBytes

操作的峰值内存消耗

通过这两个字段定位内存消耗大户,为内存限制的设置提供数据依据。

queryStats 包含 mongos 转发的查询

启用 queryStats 后,分片服务器现在包含来自 mongos 的查询统计。此前这些查询在分片级不可见。

serverStatus 按需输出

新增指标覆盖聚合扩展、分片临界区、TTL 操作、向量搜索、复制 oplog fetcher 延迟和执行队列准入。

通过 none: 1 标志位屏蔽所有可选字段,再选择性加入:

db.runCommand({ serverStatus: 1, none: 1, locks: 1 })

使用 lockContentionMetrics: 1 按需包含锁竞争数据。

说明

service 字段已从 serverStatus 输出中移除。

FTDC 保留容量提升

FTDC 默认诊断目录上限从 200 MB 提升至 500 MB。connPoolStats 现在会为 mongod 采集。

性能与系统参数

预认证连接资源管控

三个新参数限制未完成认证的连接可占用的资源:

参数

用途

capMemoryConsumptionForPreAuthBuffers

预认证缓冲区内存上限

messageSizeErrorRateSec

消息大小错误的速率限制

preAuthMaximumMessageSizeBytes

预认证最大消息体大小

这些参数防止连接洪泛攻击导致的实例资源耗尽。

缓存压力自动回收

cachePressureQueryPeriodMilliseconds 控制存储引擎检查缓存压力的频率。检测到压力后,自动中止最旧的事务以释放缓存。

过载感知服务选择

开启 overloadAwareServerSelectionEnabled 后,客户端收到 SystemOverloadedError 时自动切换到其他节点重试。

五个参数控制 mongos 到 mongod 内部连接的重试退避:

参数

控制内容

defaultClientBaseBackoffMillis

初始重试延迟

defaultClientMaxBackoffMillis

最大重试延迟

defaultClientRetryAttempts

最大重试次数

shardRetryTokenBucketCapacity

每个分片的过载重试令牌池大小

shardRetryTokenReturnRate

请求成功时令牌的返还速率

入口限流豁免

ingressRequestRateLimiterApplicationExemptions 允许指定不受入口限流约束的应用程序(按 appName 匹配)。在连接字符串中设置应用名:

mongodb://server:27017/db?appname=mongodump

Profiler 影响控制

两个新参数防止 profiler 影响生产性能:

参数

用途

internalQueryGlobalProfilingLockDeadlineMs

profiling 锁的全局超时

internalProfilingMaxAbandonedWritesPerSecondPerDb

每数据库每秒最大放弃写入数

通过 serverStatus 中的 profiler.totalAbandonedWrites 和 profiler.dbsPastThreshold 指标监控 profiler 开销。

索引变更

2dsphere 默认版本升级

2dsphereVersion 默认值从 3 升级至 4。

重要

将 FCV 降级到 8.3 以下前,必须先删除所有 version 4 的 2dsphere 索引。

GeoJSON 优先

文档同时包含 GeoJSON 和旧版数值坐标时,索引生成现在优先使用 GeoJSON。如果依赖旧版坐标的现有索引,升级后需要重建。

时间序列变更

变更

详情

分片键约束

refineCollectionShardKey 在时间序列集合上要求分片键引用逻辑元数据和时间字段,不再接受底层存储桶格式。

索引命名

时间序列索引不能命名为 _id_,也不能将 _id_ 用作 hint。

timeField 命名

timeField 名称不能以 $ 开头。

行为变更

领域

变更

Upsert 错误码

产生超过 16 MB BSON 对象的 upsert 返回错误码 10334(BSONObjectTooLarge)

validate

validate 新增对 16 MB 文档的检查。validate(full=true) 不再自动启用 checkBSONConformance。

日期运算

$dateAdd / $dateSubtract 对 1970 年前日期使用非毫秒单位时,结果可能比旧版慢一秒

浮点数解析

支持解析全范围双精度浮点数(含次正规数如 7.08263e-317)

$trim 字符上限

$trim、$ltrim、$rtrim 的 chars 参数上限为 4,096 个字符

$mergeObjects

可在 $setWindowFields 中使用

TextOr 内存

TextOr 阶段($text 评分)内存上限 100 MB;allowDiskUse 为 true 时溢出到磁盘

explain

分片集群上对不存在的数据库执行 explain() 不再隐式创建该数据库

config.csrs.indexes

config.csrs.indexes 系统集合已移除

findShardsOnConfigTimeoutMS

新增参数,限制 config.shards 查询超时