参考 > 发行说明 > MongoDB 3.4发布说明 > MongoDB 3.4中的兼容性更改
在本页面
以下3.4更改可能会影响与旧版MongoDB的兼容性。
另请参阅MongoDB 3.4发行说明。
shardsvr
要求¶对于3.4 mongod
分片群集,分片实例必须shardsvr
通过配置文件设置
sharding.clusterRole
或通过命令行选项
明确将其角色指定为a --shardsvr
。
MongoDB 3.4从中删除了以下配置选项mongos
:
sharding.chunkSize
配置文件设置和
--chunkSize
命令行选项sharding.autoSplit
配置文件设置和
--noAutoSplit
命令行选项3.4分片群集不再支持将镜像(SCCC)
mongod
实例用作配置服务器。3.2版本中弃用的SCCC配置服务器的使用不再有效。而是将您的配置服务器部署为副本集(CSRS)。
要将分片群集升级到版本3.4,配置服务器必须作为副本集运行。
要将现有的配置服务器从SCCC转换为CSRS,请参阅MongoDB 3.4手册《将配置服务器升级到副本集》。
也可以看看
renameCollection
¶如果在运行初始同步时在同步源上重命名了集合,则初始同步过程将失败并重新启动,以避免可能的数据损坏。参见 SERVER-26117。
重命名集合的操作包括:
renameCollection
命令和
db.collection.renameCollection()
方法。db.collection.aggregate()
方法或
aggregate
命令)$out
。db.collection.mapReduce()
方法或
mapReduce
命令)out
。convertToCapped
命令。因此,从3.2.11或更早版本升级到3.4时,如果初始同步遇到renameCollection
操作,可能会开始失败。
在MongoDB 3.2.11或更早版本中,遇到renameCollection
操作时可能会进行初始同步过程,这可能会破坏数据。请参阅SERVER-4941。
MongoDB 3.4在操作期间create
和db.createCollection()
操作中对收集选项进行了更严格的验证
;即,指定的选项必须是create
和支持的有效选项
db.createCollection()
。
例如,以下操作不再有效:
MongoDB 3.4在操作期间createIndexes
和
db.collection.createIndex()
操作期间将对索引规范进行更严格的验证。强制不适用于现有索引。
更严格的验证包括以下内容:
确保索引键模式中的值有效。具体来说,值可以是:key: value
值 | 描述 |
---|---|
大于0的数字 | 升序 |
小于0的数字 | 对于降序索引 |
字符串“文本”,“ 2dsphere”,“ 2d”或“哈希” | 对于特殊索引类型 |
例如,以下操作不再有效:
确保指定的索引选项有效。以前的版本忽略无效的选项。例如,以下操作不再有效:
更新了名称空间限制:在MongodDB 3.4中,$
数据库名称不再支持该字符。
重要
$
在升级到MongoDB 3.4之前,必须删除名称中包含的任何数据库。
删除不推荐使用的textSearchEnabled
参数。从2.6版开始,默认情况下,MongoDB启用文本搜索功能。
删除mongosniff
。在MongoDB 3.4中,
mongosniff
替换为mongoreplay
,它提供了更加灵活mongosniff
的功能超集。
如果在执行集合中的所有文档时
都包含一个hint()
指定
稀疏索引的count()
a(即查询谓词为空),则即使稀疏索引导致计数错误,也会使用稀疏索引。
为了获得正确的计数,对集合中的所有文档进行计数时,请不要hint()
使用
稀疏索引。
如果使用稀疏索引会导致计数不完整,则以前的版本会忽略该提示。
以下内置角色的特权不再适用于
local
和config
数据库:
readAnyDatabase |
从3.4开始,要提供
数据库read 特权,请在local 数据库中创建一个具有admin 数据库
read 角色的用户local 。另请参见
clusterManager 和clusterMonitor 角色,以访问config 和local 数据库。 |
readWriteAnyDatabase |
从3.4开始,要提供数据库readWrite 特权,请在
local 数据库中创建一个具有admin 数据库
readWrite 角色的用户local 。另请参见
clusterManager 和clusterMonitor 角色,以访问config 和local 数据库。 |
userAdminAnyDatabase |
|
dbAdminAnyDatabase |
从3.4开始,要提供数据库dbAdmin 特权,请在
local 数据库中创建一个具有admin 数据库
dbAdmin 角色的用户local 。另请参见
clusterManager 和clusterMonitor 角色,以访问config 和local 数据库。 |
相应地,以下内置角色包括对local
和config
数据库的附加读取和写入特权:
以下3.4功能保留了MongoDB早期版本无法正确处理的数据,并将
featureCompatibilityVersion
其设置为"3.4"
:
索引版本。索引增加了对排序规则和十进制数据类型的支持。早期的索引版本既不支持排序规则也不支持十进制数据类型。v: 2
v:2
如果是,则在MongoDB 3.4中创建的索引默认为。否则,新索引默认为。featureCompatibilityVersion: "3.4"
v: 2
v: 1
要设置featureCompatibilityVersion
,请参见
setFeatureCompatibilityVersion
命令。
警告
启用这些向后不兼容的功能会使降级过程复杂化。有关详细信息,请参阅删除3.4不兼容的功能。
建议在升级后,允许您在不启用这些功能的情况下运行部署,并且要在预热期内确保降级的可能性最小。如果您确信降级的可能性很小,请启用这些功能。
3.4部署具有以下默认
featureCompatibilityVersion
值:
3.4部署 | featureCompatibilityVersion |
---|---|
对于新部署 | "3.4" |
对于从3.2升级的部署 | "3.2" 直到你setFeatureCompatibilityVersion
去"3.4" 。 |
如果数据库包含视图,排序规则规范或v:2
索引,则不会启动早期版本的MongoDB 。如果数据包含十进制数据类型,则对这些文档的操作可能会失败。有关详细信息,请参阅将MongoDB 3.4降级到3.2。如果需要降级,则必须在降级二进制文件之前从数据库中删除与这些不兼容功能相关的数据。
$in
带有upsert
¶当某个upsert
操作找不到匹配的文档时,它将根据查询中的等式语句创建一个要插入的文档,然后将update修饰符应用于该种子文档。例如:
在3.4之前的版本中,单元素$ in查询没有为upsert
文档添加种子。在下面的示例中,$addToSet
由于以下行为,更新表达式成功执行:
但是,在3.4及更高版本中,单元素的$in
行为类似于对upserts的相等声明。如果查询在字段上包括此条件,则将字段值设置为元素。
由于此行为,某些向上插入操作可能在3.4中失败。在上面的示例中,$addToSet
向上插入将失败,因为该a
字段将使用单个值作为种子,并且$addToSet
无法应用于标量字段。为避免此错误,必须将$in
表达式包装在表达式中$elemMatch
: