On this page
MongoDB 3.2 中的兼容性更改
在本页面
以下 3.2 更改可能会影响与旧版 MongoDB 的兼容性。另请参阅MongoDB 3.2 发行说明以获取 3.2 更改的列表。
默认存储引擎更改
从 3.2 开始,MongoDB 使用 WiredTiger 作为默认存储引擎。早期版本使用 MMAPv1 作为默认存储引擎。
对于现有部署,如果未指定--storageEngine
或storage.engine设置,则 MongoDB 会自动确定用于在--dbpath
或storage.dbPath中创建数据文件的存储引擎。
对于新部署,要使用 MMAPv1,必须明确指定存储引擎设置之一:
- 在带有
--storageEngine
选项的命令行中:
mongod --storageEngine mmapv1
- 或在configuration file中,使用storage.engine设置:
storage:
engine: mmapv1
Index Changes
版本 0 索引
MongoDB 3.2 不允许创建版本 0 索引(即{v: 0}
)。如果存在版本 0 索引,则 MongoDB 3.2 将输出一条警告日志消息,指定集合和索引。
从 MongoDB 2.0 开始,MongoDB 开始在initial sync,mongorestore或reIndex操作期间自动升级v: 0
索引。
如果存在版本 0 索引,则可以使用上述任何操作以及删除并重新创建索引以升级到v: 1
版本。
例如,如果启动时出现警告消息,指示索引index { v: 0, key: { x: 1.0 }, name: "x_1", ns: "test.legacyOrders" }
是版本 0 索引,要升级到适当的版本,可以删除并重新创建索引:
- 按名称删除索引:
use test
db.legacyOrders.dropIndex( "x_1" )
或按键:
use test
db.legacyOrders.dropIndex( { x: 1 } )
- 重新创建没有版本选项
v
的索引:
db.legacyOrders.createIndex( { x: 1 } )
文本索引版本 3 兼容性
Literals 索引(版本 3)与 MongoDB 的早期版本不兼容。如果数据库中存在Literals 索引(版本 3),则 MongoDB 的早期版本将无法启动。
2dsphere 索引版本 3 兼容性
2 dsphere 索引(版本 3)与 MongoDB 的早期版本不兼容。如果数据库中存在2dsphere
索引(版本 3),则 MongoDB 的早期版本将无法启动。
聚合兼容性更改
$avg累加器在不存在的字段上运行时返回 null。以前的版本返回
0
。如果结果是无效的 UTF-8,则$substr错误。以前的版本输出无效的 UTF-8 结果。
数组元素在聚合管道中不再被视为 Literals。取而代之的是,现在将数组的每个元素解析为一个表达式。要将元素视为 Literals 而不是表达式,请使用$literal运算符创建 Literals 值。
$unwind不再对非数组操作数产生错误。如果操作数不能解析为数组,但不丢失,为 null 或为空数组,则$unwind会将操作数视为单个元素数组。以前,如果由字段路径指定的字段中的值不是数组,则db.collection.aggregate()会产生错误。
SpiderMonkey 兼容性更改
MongoDB 3.2 将 JavaScript 引擎从 V8 更改为 SpiderMonkey。这项更改允许使用更多现代的 JavaScript 语言功能,并且对mongo shell 进行了较小的改进和兼容性更改。
有关此更改的更多信息,请参见MongoDB 3.2 中的 JavaScript 更改。
副本集配置验证
MongoDB 3.2 提供了对副本集配置设置的更严格的验证:
驱动程序兼容性更改
通用兼容性更改
在 MongoDB 3.2 中,不推荐使用
cursor.showDiskLoc()
,而推荐使用cursor.showRecordId(),并且两者都返回新的文档格式。MongoDB 3.2 将
serverStatus.repl.slaves
字段重命名为repl.replicationProgress。请参阅: db.serverStatus() repl参考以获取更多信息。默认值从--moveParanoia更改为--noMoveParanoia。
从 MongoDB 3.2 开始不推荐使用
mongooplog
。
Additional Information
另请参见MongoDB 3.2 发行说明。