翻译或纠错本页面

MongoDB 3.4 中的兼容性变化

下面的 3.4 变化可能会影响与之前版本MongoDB的兼容性。

也可查阅 MongoDB 3.4 发布笔记

分片集群变化

shardsvr 要求

对于一个 3.4 分片集群, 分片的 mongod 实例 必须 显式指定它的角色为 shardsvr ,要么通过配置文件设置 sharding.clusterRole 或者通过命令行选项 --shardsvr 进行设置。

注解

Default port for mongod instances with the shardsvr role is 27018. To use a different port, specify net.port setting or --port option.

3.4 的 mongos 以及之前版本的 mongod

3.4 版本的 mongos 实例无法连接到之前版本的 mongod 实例。

配置选项的删除

MongoDB 3.4 从 mongos 中删除了以下配置选项:

  • sharding.chunkSize 配置文件设置以及 --chunkSize 命令行选项

  • sharding.autoSplit 配置文件设置以及 --noAutoSplit 命令行选项

SCCC配置服务器支持的删除

3.4 分片集群不再支持镜像(SCCC) mongod 实例作为配置服务器的使用。 SCCC配置服务器的使用已经在3.2版本中弃用,不再有效。相反地,部署您的配置服务器为复制集(CSRS)。

为了将您的分片集群升级到3.4 版本,配置服务器必须运行为复制集。

为了将您现有的配置服务器从SCCC转化到CSRS,请查阅 Upgrade Config Servers to Replica Set

已弃用的操作

group

Mongodb 3.4 弃用了下列命令以及 mongo shell方法:

cursoraggregate

MongoDB 3.4 弃用了 cursor 选项 aggregate 命令的使用,除非管道中包含 explain 选项。使用 aggregate 命令返回聚合结果的时候,使用默认的批大小 cursor: {} 指定游标选项或者在游标选项 cursor: { batchSize: <num> } 中指定批大小。

更严格的集合验证和索引规范

更严格的集合验证选项

MongoDB 3.4 强制要求在 create 以及 db.createCollection() 操作中进行更严格的集合验证选项;即:指定的选项必须是 createdb.createCollection() 支持的可靠选项。

例如,下列操作不再有效:

db.createCollection( "myCappedCollection", { caped: true,  size: 5242880 } )

更严格的索引规范验证

MongoDB 3.4 强制要求在 createIndexesdb.collection.createIndex() 操作期间更严格的索引规范。这些强制要求不会应用与现有索引。

更严格的验证包括:

  • 保证 索引键模式 key: value 是有效的。详细说来,值可以是:

    描述

    大于0的数

    对于递增的索引

    小于0的数

    对于递减的索引

    字符串 “text” , “2dsphere” , “2d” , 或者 “hashed”

    对于特殊的索引类型

    例如,下面的操作不再有效:

    db.collection.createIndex( { x: 0 } );
    db.collection.createIndex( { y: "text2d" } );
    db.collection.createIndex( { z: NaN } );
    db.collection.createIndex( { x: 1, unique: true } )
    
  • 保证指定的 index options 是有效的。之前的版本忽略了无效的选项。例如,下面的操作不再有效:

    db.collection.createIndex( { y: 1 }, { uniques2: true} );
    db.collection.createIndex( { z: 1 }, { expireAfterSec: 350 } )
    

一般性兼容性变化

  • 删除了弃用 的 textSearchEnabled 参数。从2.6版本开始,MongoDB默认开启文本检索功能。

  • 删除了 mongosniff 。 在MongoDB 3.4 中, mongoreplay 替换了 mongosniff,提供了 mongosniff 的功能更加灵活的超集。

用户角色变化

下列内置角色的权限不应用于 localconfig 数据库。

相对应地, clusterManagerclusterMonitorbackup , 和 restore 角色包括在 localconfig 数据库上其它的读写权限。

逆向不兼容的功能

下面的3.4 功能保存之前MongoDB版本不能正确处理的数据,要求 featureCompatibilityVersion 设置为 "3.4"

  • 视图

  • 校对及大小写敏感的索引

  • 十进制烈性

  • 索引版本 v: 2v:2 索引增加了对collation和十进制数据的支持。之前的索引版本既不支持collation也不支持十进制数据类型。

    如果是 featureCompatibilityVersion: "3.4" , 那么在MongoDB 3.4 中创建的索引默认为 v: 2 。否则的话,新索引默认为 v: 1

如果想要设置 featureCompatibilityVersion ,请查阅 setFeatureCompatibilityVersion 命令。

警告

启动这些 向后不兼容的功能可以查阅 删除 3.4 不兼容的功能 。查阅 删除 3.4 不兼容的功能 了解更多细节。

推荐在升级之后,您允许您的部署在预模拟阶段在不启动这些功能的情况下运行,以保证降级可能性为最小。当您确认了降级的可能性最小时,开启这些功能。

3.4 部署有下列默认的 featureCompatibilityVersion 值:

3.4 部署

featureCompatibilityVersion

对于新部署

"3.4"

对于 upgraded from 3.2 的部署

"3.2" 直到您 setFeatureCompatibilityVersion"3.4"

如果数据库包含视图、collation规范,或者 v:2 索引,之前版本的 MongoDB将不会启动。如果数据包含十进制数据类型,这些文档上的操作也许会失败。请查阅 降级 MongoDB 3.4 到 3.2 了解更多细节。 如果您想要降级,您必须在降级二进制之前删除数据库中不兼容功能相关的数据。

驱动程序兼容性变化

为了使用MongoDB 驱动程序中多样的新功能,例如新的 十进制烈性 以及 Collation ,需要升级到能够支持这些功能的驱动版本。