云数据库MongoDB支持升级数据库大版本。升级前,建议您了解不同产品架构、不同版本的实例支持升级到的数据库大版本以及不同数据库大版本的兼容性变更说明。

支持升级到的数据库大版本

不同产品架构、不同版本的云数据库MongoDB实例支持升级到的数据库大版本如下:
产品架构规格类型实例的数据库大版本可升级到的数据库大版本
单节点架构通用型云盘版MongoDB 4.0暂无更高的数据库大版本可升级。
通用型云盘版MongoDB 3.4不支持升级数据库大版本。

如果您需要升级数据库大版本,可以通过创建新实例,使用新实例替换旧实例的方法实现。如何创建单节点实例,请参见创建单节点实例

双节点架构通用型云盘版MongoDB 4.4暂无更高的数据库大版本可升级。
副本集架构独享型云盘版MongoDB 6.0暂无更高的数据库大版本可升级。
MongoDB 5.0MongoDB 6.0
MongoDB 4.4MongoDB 5.0
  • 通用型本地盘版
  • 独享型本地盘版
  • 独占物理机
MongoDB 4.2不支持升级数据库大版本。

如果您需要升级数据库大版本,可以通过创建新实例,使用新实例替换旧实例的方法实现。如何创建副本集实例,请参见创建副本集实例

MongoDB 4.0MongoDB 4.2
MongoDB 3.4
  • MongoDB 4.0
  • MongoDB 4.2
分片集群架构独享型云盘版MongoDB 6.0暂无更高的数据库大版本可升级。
MongoDB 5.0MongoDB 6.0
MongoDB 4.4MongoDB 5.0
  • 通用型本地盘版
  • 独享型本地盘版
  • 独占物理机
MongoDB 4.2不支持升级数据库大版本。

如果您需要升级数据库大版本,可以通过创建新实例,使用新实例替换旧实例的方法实现。如何创建分片集群实例,请参见创建分片集群实例

MongoDB 4.0MongoDB 4.2
MongoDB 3.4
  • MongoDB 4.0
  • MongoDB 4.2
Serverless架构MongoDB 4.2暂无更高的数据库大版本可升级。

大版本兼容性变更说明

不同数据库大版本的兼容性变更说明如下:
重要
  • 升级数据库大版本时,实例的状态需为运行中。如何升级数据库大版本,请参见升级数据库版本
  • 升级数据库大版本后不支持降级。
  • MongoDB 4.0及以上大版本已兼容MongoDB 3.6。如果您需要使用MongoDB 3.6大版本的功能,请升级到MongoDB 4.0及以上大版本。
  • 兼容性变更说明仅包含云数据库MongoDB内核的变更,不包含MongoDB实例管控功能的变更。
数据库大版本兼容性变更说明
MongoDB 6.0
  • 如果聚合管道里使用的内存超过了100 MB,默认会写入数据到磁盘的临时文件中。若要更改此默认行为,请修改全局参数allowDiskUseByDefaultfalse

    6.0之前的版本需要显式指定{ allowDiskUse: true }参数,才能写入数据到磁盘的临时文件中。

  • 通过dropIndexes删除索引时,如果使用通配符*,不会删除_id索引,也不会删除分片键索引,更多信息,请参见dropIndexes
  • 不再支持Mongo Shell工具,请使用mongosh工具替代。
  • 不再支持$explain$hint$max$maxTimeMS等操作符。
  • 当TTL索引expireAfterSeconds被设置为NaN时,会被认为设置为0,可能会立马淘汰过期文档。
  • 不再支持SCRAM-SHA-1认证方法。
  • 不再支持reIndex命令以及相对应的reIndex()方法。

MongoDB 6.0的更多信息,请参见Compatibility Changes in MongoDB 6.0

MongoDB 5.0
  • Secondary节点(从节点)的Read Concern级别从available变更为local,更多信息,请参见Read Concern
  • Write Concern的默认值由1变更为majority
  • 不再支持db.collection.ensureIndex(),请使用db.collection.createIndex()替代。
  • saslStart以及saslContinue命令的参数进行严格校验,无法兼容mgosaslContinue只需要conversationIdpayload参数,而mgo提供了一个多余的参数 mechanism,更多信息,请参见mgo
  • 删除geoSearch

MongoDB 5.0的更多信息,请参见Compatibility Changes in MongoDB 5.0

MongoDB 4.4
  • compact不再支持force选项,更多信息,请参见compact
  • 不再支持geoSearch,更多信息,请参见geoSearch
  • 支持在主备数据库上同时创建索引,以减少索引创建带来的主备延迟。即使在索引创建过程中,也可以保证备库访问到最新的数据。

MongoDB 4.4的更多信息,请参见Compatibility Changes in MongoDB 4.4

MongoDB 4.2
  • 不再支持geoNear,请使用$geoNear (aggregation)替代,更多信息,请参见geoNear$geoNear (aggregation)
  • 不再支持repairDatabase,更多信息,请参见repairDatabase
  • 不再支持并删除cloneCollection,请使用mongoexportmongoimport替代,更多信息,请参见cloneCollectionmongoexportmongoimport
  • 不再支持mapReduce,更多信息,请参见mapReduce
  • 不再支持使用db.collection.dropIndex("*")删除所有非_id索引,请使用db.collection.dropIndexes()替代。
  • 统一前后台索引创建机制,使用只在索引创建的开始和结束阶段对集合加独占锁的加锁机制。
    说明
    • 加独占锁时间段内不支持无锁,防止元数据被更改。
    • 不再支持db.collection.createIndex(keys, options, commitQuorum)中可选参数options的值background,如果在命令中为该参数指定了具体的值,云数据库MongoDB将忽略该值。
  • count中的选项名称进行更严格的验证。如果您指定未知的选项名称,执行该命令会出错,更多信息,请参见count
  • cursor.min()cursor.max()需要指定索引,更多信息,请参cursor.min()cursor.max()
  • 开源MongoDB 4.2+兼容驱动默认启用Retryable Writes,更多信息,请参见Retryable Writes
  • 删除groupcopydbclone

MongoDB 4.2的更多信息,请参见Compatibility Changes in MongoDB 4.2

MongoDB 4.0
  • reIndex添加一个全局写锁,直到索引重建完成,更多信息,请参见reIndex
  • 不再支持copydbclone,更多信息,请参见copydbclone

MongoDB 4.0的更多信息,请参见Compatibility Changes in MongoDB 4.0

MongoDB 3.6在MongoDB 3.4和MongoDB 4.0之间,开源MongoDB还支持MongoDB 3.6。在将MongoDB 3.6以下的大版本升级至MongoDB 4.0及以上大版本时,需要关注如下兼容性变更内容:
  • aggregate不再支持返回单个文档,而是返回cursor。用户可以通过cursor指定batch的规格。aggregate的更多信息,请参见aggregate
  • $type: "array"能直接检测到数组类型的文档(即能够同时检测到示例中_id为1和2的文档),之前只能检测到嵌套型的数组类型文档(仅能检测到示例中_id为2的文档)。
    示例:
    {"_id":1,"a":[1,2,3]}
    {"_id":2,"a":[1,2,[3,4]]}

    $type的更多信息,请参见$type

  • 数组排序结果,发生以下变更:
    • find中新增可选项sort,用于提供排序结果明细。find的更多信息,请参见find
    • $sort(aggregation)$sort stage的内存限制为100 MB,如果超出该限制,$sort将报错。$sort(aggregation)的更多信息,请参见$sort (aggregation)
  • 在进行更新操作时,如果需要同时更新多个字段,新字段将按照字典顺序添加,更多信息,请参见$set
  • ISODate(日期类型)的值转换成字符串返回,支持毫秒(ms),且在末尾添加Z
  • 不再支持snapshot查询选项。

MongoDB 3.6的更多信息,请参见Compatibility Changes in MongoDB 3.6

MongoDB 3.4
  • 不再支持group,请使用aggregate中的$group (aggregation)替代。$group (aggregation)的更多信息,请参见$group (aggregation)
  • 使用$in表达式匹配+ upsert: trueupdate
    示例:
    db.c.drop()
    db.c.update({a:{$in:[1]}},{$addToSet:{a:2}},{upsert:true}) //在MongoDB 3.4插入会失败,MongoDB 3.4之前的大版本可成功插入一条记录。
    db.c.update({a:{$elemMatch:{$in:[2]}}},{$addToSet:{a:2}},{upsert:true}) //在MongoDB 3.4可成功插入一条记录。

    update的更多信息,请参见update

MongoDB 3.4的更多信息,请参见Compatibility Changes in MongoDB 3.4

相关API

接口说明
UpgradeDBInstanceEngineVersion升级云数据库MongoDB实例的数据库大版本。