MongoDB 3.2 发行说明

在本页面

MongoDB 3.2 现在可用。主要功能包括 WiredTiger 作为默认存储引擎,复制选举增强功能,配置服务器作为副本集,readConcern以及文档验证。

还可以使用 OpsManager 2.0. 有关更多信息,请参见Ops Manager 文档Ops Manager 发行说明

Minor Releases

3.2.22-2018 年 12 月 28 日

3.2.21-2018 年 9 月 7 日

3.2.20-2018 年 5 月 10 日

3.2.19-2018 年 2 月 6 日

3.2.18-2017 年 11 月 29 日

3.2.17-2017 年 9 月 28 日

Issues fixed:

3.2.16-2017 年 7 月 27 日

Issues fixed:

3.2.15-2017 年 7 月 5 日

Issues fixed:

3.2.14-2017 年 6 月 13 日

Issues fixed:

3.2.13 – 2017 年 5 月 1 日

Issues fixed:

3.2.12 – 2017 年 2 月 1 日

Issues fixed:

3.2.11 – 2016 年 11 月 18 日

Issues fixed:

3.2.10 – 2016 年 9 月 30 日

Issues fixed:

3.2.9 – 2016 年 8 月 16 日

Issues fixed:

3.2.8 – 2016 年 7 月 12 日

Issues fixed:

3.2.7 – 2016 年 6 月 7 日

Issues fixed:

3.2.6 – 2016 年 4 月 28 日

Issues fixed:

3.2.5 – 2016 年 4 月 14 日

Issues fixed:

3.2.4 – 2016 年 3 月 8 日

Issues fixed:

3.2.3 – 2016 年 2 月 17 日

Issues fixed:

3.2.2 – 2016 年 2 月 16 日

被 MongoDB 3.2.3 取代。希望运行 MongoDB 3.2 的用户应跳过 3.2.2 并直接升级到 3.2.3.

3.2.1 – 2016 年 1 月 12 日

Issues fixed:

默认为 WiredTiger

从 3.2 开始,MongoDB 使用 WiredTiger 作为默认存储引擎。

要指定 MMAPv1 存储引擎,您必须指定存储引擎设置之一:

mongod --storageEngine mmapv1
storage:
   engine: mmapv1

Note

对于现有部署,如果未指定--storageEnginestorage.engine设置,则 MongoDB 3.2 可以自动确定用于在--dbpathstorage.dbPath中创建数据文件的存储引擎。

如果指定--storageEnginestorage.engine,则如果dbPath包含由指定存储引擎以外的存储引擎创建的数据文件,则mongod将不会启动。

WiredTiger 默认缓存大小

从 MongoDB 3.2 开始,默认情况下,WiredTiger 内部缓存将使用以下两者中的较大者:

有关更多信息,请参见WiredTiger 和内存使用

WiredTiger 日记写频率

MongoDB 3.2 将 WiredTiger 配置为每 50 毫秒写入一次日记文件。这是对现有日志写入间隔和条件的补充。有关更多信息,请参见Journaling Process

复制选举功能增强

从 MongoDB 3.2 开始,MongoDB 减少了副本集故障转移时间,并加快了对多个同时存在的主数据库的检测。

作为此增强功能的一部分,MongoDB 引入了复制协议的版本 1.默认情况下,新副本集将使用protocolVersion: 1。 MongoDB 的早期版本使用协议的版本 0.

此外,MongoDB 引入了新的副本集配置选项electionTimeoutMilliselectionTimeoutMillis指定以毫秒为单位的时间限制,以检测副本集的主数据库何时不可用。

electionTimeoutMillis仅在使用replication protocol的版本 1 时适用。

分片群集增强

MongoDB 3.2 不赞成将三个镜像的mongod实例用于配置服务器。

而是从 3.2 开始,可以将分片群集的config servers部署为副本集。副本集配置服务器必须运行 WiredTiger 存储引擎。

由于 MongoDB 可以利用标准副本集读写协议来分摊配置数据,因此此更改可提高配置服务器之间的一致性。此外,由于副本集最多可包含 50 个成员,因此这允许分片群集具有 3 个以上的配置服务器。

有关更多信息,请参见Config Servers。要使用副本集配置服务器部署“新”分片集群,请参阅部署分片集群

MongoDB 3.6 不赞成使用主从复制。

自 MongoDB 3.2 起,分片群集组件已弃用主从复制。

从 3.2 开始,mongos在启动期间将 continue 尝试与配置服务器联系,直到有一个可用。在以前的版本中,mongos在启动过程中如果找不到配置服务器,则会关闭。

readConcern

MongoDB 3.2 为副本集和副本集分片引入了readConcern查询选项。对于WiredTiger 存储引擎readConcern选项允许 Client 端选择其读取的隔离级别。您可以指定_6 的readConcern来读取已写入大多数节点并且因此无法回滚的数据。默认情况下,MongoDB 使用"local"readConcern返回查询时该节点可用的最新数据,即使该数据尚未持久化到大多数节点并可能回滚。使用MMAPv1 存储引擎时,您只能指定"local"readConcern

readConcern需要为 MongoDB 3.2 更新的 MongoDB 驱动程序。

有关readConcern的详细信息,包括支持该选项的操作,请参见Read Concern

Partial Indexes

MongoDB 3.2 提供了创建仅对满足指定过滤器表达式的集合中的文档编制索引的索引的选项。通过索引集合中文档的子集,部分索引具有较低的存储需求,并降低了索引创建和维护的性能成本。您可以为所有 MongoDB index types指定partialFilterExpression选项。

partialFilterExpression选项接受使用以下条件指定条件的文档:

有关详细信息,请参见Partial Indexes

Document Validation

从 3.2 开始,MongoDB 提供了在更新和插入期间验证文档的功能。验证规则是基于每个集合指定的。

要在新集合上指定文档验证,请在db.createCollection()方法中使用新的validator选项。要将文档验证添加到现有集合中,请在collMod命令中使用新的validator选项。有关更多信息,请参见Schema Validation

要查看集合的验证规范,请使用db.getCollectionInfos()方法。

以下操作可以使用新选项bypassDocumentValidation绕过每个操作的验证:

Command mongo Shell 方法
aggregate$out一起使用 db.collection.aggregate()$out一起使用
applyOps
cloneCollection
clone
copydb
findAndModify db.collection.findAndModify()
insert
mapReduce db.collection.mapReduce()
update

对于已启用访问控制的部署,您必须执行bypassDocumentValidation操作。内置角色dbAdminrestore提供此操作。

汇总框架增强功能

MongoDB introduces:

新的聚集阶段

Stage Description Syntax
$sample 从其 Importing 中随机选择 N 个文档。 { $sample: { size: <positive integer> } }
$indexStats 返回有关索引使用情况的统计信息。 { $indexStats: { } }
$lookup 与另一个集合执行左外部联接。 {

$lookup:
{
from: <collection to join>,
localField: <fieldA>,
foreignField: <fieldB>,
as: <output array field>
}
}

$ group 阶段的新累加器

Accumulator Description Syntax
$stdDevSamp 计算标准偏差。 { $stdDevSamp: <array> }
$stdDevPop 计算总体标准差。 { $stdDevPop: <array> }

新的聚合算术运算符

Operator Description Syntax
$sqrt 计算平方根。 { $sqrt: <number> }
$abs 返回数字的绝对值。 { $abs: <number> }
$log 以指定的底数计算数字的对数。 { $log: [ <number>, <base> ] }
$log10 计算数字的以 10 为底的对数。 { $log10: <number> }
$ln 计算数字的自然对数。 { $ln: <number> }
$pow 将数字提高到指定的指数。 { $pow: [ <number>, <exponent> ] }
$exp 将* e *提高到指定的指数。 { exp: <number> }
$trunc 将数字截断为其整数。 { $trunc: <number> }
$ceil 返回大于或等于指定数字的最小整数。 { $ceil: <number> }
$floor 返回小于或等于指定数字的最大整数。 { floor: <number> }

新的聚合阵列运算符

Operator Description Syntax
$slice 返回数组的子集。 { $slice: [ <array>, <n> ] }

or
{ $slice: [ <array>, <position>, <n> ] }
$arrayElemAt 返回指定数组索引处的元素。 { $arrayElemAt: [ <array>, <idx> ] }
$concatArrays Concatenates arrays. {
$concatArrays: [ <array1>,<array2>,...]
}
$isArray 确定操作数是否为数组。 { $isArray: [ <expression> ] }
$filter 根据条件选择数组的子集。 {
$filter:
{
input: <array>,
as: <string>,
cond: <expression>
}
}

累加器表达式的可用性

从 3.2 版开始,以下以前仅在$group阶段可用的累加器表达式现在在$project阶段也可用:

当用作$project阶段的一部分时,这些累加器表达式可以接受以下任一个:

General Enhancements

$unwind阶段可以:

为了支持这些新功能,$unwind现在可以采用其他语法。有关详情,请参见$unwind

Optimization

索引可以cover聚合操作。

MongoDB 改善了大型分片群集中管道的整体性能。

如果管道在分片键上以精确的$match开头,则整个管道仅在匹配的分片上运行。以前,管道会被拆分,并且合并它的工作必须在主碎片上完成。

对于在多个分片上运行的聚合操作,如果这些操作不需要在数据库的主分片上运行,则这些操作可以将结果路由到任何分片以合并结果,并避免该数据库的主分片过载。需要在数据库的主分片上运行的聚合操作为$out阶段和$lookup阶段。

Compatibility

有关兼容性的更改,请参见聚合兼容性更改

MongoDB 工具增强功能

加密的存储引擎

Enterprise Feature

仅在 MongoDB Enterprise 中可用。

Important

仅适用于 WiredTiger 存储引擎。

静态加密与传输加密和保护相关帐户,密码和加密密钥的良好安全策略结合使用时,可以帮助确保符合 HIPAA,PCI-DSS 和 FERPA 等安全和隐私标准。

MongoDB Enterprise 3.2 为 WiredTiger 存储引擎引入了本机加密选项。此功能允许 MongoDB 加密数据文件,以便只有具有解密密钥的各方才能解码和读取数据。有关详细信息,请参见加密存储引擎

文本搜索增强

Literals 索引版本 3

MongoDB 3.2 引入了text index的版本 3.新版本索引的主要功能是:

从 MongoDB 3.2 开始,版本 3 是新text索引的默认版本。

$ text 运算符增强

$text运算符增加了对以下内容的支持:

有关更多信息和示例,请参见$text运算符参考部分Case InsensitivityDiacritic Insensitivity

支持其他语言

Enterprise Feature

仅在 MongoDB Enterprise 中可用。

从 3.2 开始,MongoDB Enterprise 支持以下语言:阿拉伯语,波斯语(特别是达里语和伊朗波斯语),乌尔都语,简体中文和繁体中文。

有关详细信息,请参见使用基础技术 Rosette 语言学平台进行文本搜索

新的存储引擎

inMemory 存储引擎

Enterprise Feature

仅在 MongoDB Enterprise 中可用。

MongoDB Enterprise 3.2 提供了一个内存存储引擎。除某些元数据外,内存中存储引擎不维护任何磁盘上的数据。通过避免磁盘 I/O,内存中存储引擎使数据库操作的延迟更可预测。

要选择此存储引擎,请指定

inMemory存储引擎使用文档级锁定。有关更多详细信息,请参见内存中存储引擎

ephemeralForTest 存储引擎

MongoDB 3.2 提供了一个新的可测试存储引擎。除了某些元数据外,测试存储引擎不会维护任何磁盘上的数据,从而消除了在测试运行之间进行清理的需要。测试用存储引擎不受支持。

Warning

仅用于测试目的。请勿在 Producing 使用。

要选择此存储引擎,请指定

ephemeralForTest存储引擎使用集合级锁定。

General Enhancements

位测试查询运算符

MongoDB 3.2 提供了新的查询运算符来测试位值:

SpiderMonkey JavaScript 引擎

MongoDB 3.2 使用 SpiderMonkey 作为mongo shell 和mongod服务器的 JavaScript 引擎。 SpiderMonkey 支持其他平台,并具有改进的内存 Management 模型。

此更改会影响所有 JavaScript 行为,包括命令mapReducegroup和查询运算符$where但是,此更改对用户应该是完全透明的。

mongo Shell 和 CRUD API

为了提供与 MongoDB 驱动程序的 CRUD(创建/读取/更新/删除)API 的一致性,mongo shell 引入了与驱动程序的 CRUD API 一致的其他 CRUD 方法:

New API Description
db.collection.bulkWrite() 等效于初始化Bulk()操作构建器,使用Bulk methods添加操作以及运行Bulk.execute()执行操作。


MongoDB 3.2 弃用Bulk()及其关联的methods
| db.collection.deleteMany() |相当于db.collection.remove()。|
| db.collection.deleteOne() |相当于db.collection.remove(),且justOne设置为 true;即
db.collection.remove( <query>,true)db.collection.remove( <query>)。|
| db.collection.findOneAndDelete() |等效于remove设置为 true 的db.collection.findAndModify()方法。
| db.collection.findOneAndReplace() |等效于update设置为替换文档的db.collection.findAndModify()方法。
| db.collection.findOneAndUpdate() |相当于将update设置为指定使用update operators进行修改的文档的db.collection.findAndModify()方法。
| db.collection.insertMany() |等效于以文件数组作为参数的db.collection.insert()方法。
| db.collection.insertOne() |等效于以单个文档作为参数的db.collection.insert()方法。
| db.collection.replaceOne() |等效于db.collection.update( <query>, <update>)方法,其中替换文档为<update>参数。
| db.collection.updateMany() |等效于<update>文档的db.collection.update( <query>, <update>, { multi: true, ... })方法,该文档指定使用update operators并将multi选项设置为 true 的修改。
| db.collection.updateOne() |等效于<update>文档的db.collection.update( <query>, <update>)方法,该文档指定使用update operators进行的修改。

WiredTiger 和 fsyncLock

从 MongoDB 3.2 开始,WiredTiger 存储引擎通过lock选项或mongo shell 方法db.fsyncLock()支持fsync命令。也就是说,对于 WiredTiger 存储引擎,这些操作可以保证数据文件不会更改,从而确保创建备份的一致性。

Platform Support

从 3.2 开始,不建议使用 32 位二进制文件,并且在以后的版本中将不可用。

MongoDB 3.2 还弃用了对 Red Hat Enterprise Linux 5 的支持。

$ type 运算符接受字符串别名

$type运算符除了 BSON 类型对应的数字外,还接受 BSON 类型的字符串别名。

explain()支持 distinct()操作

db.collection.explain()添加了对db.collection.distinct()方法的支持。有关更多信息,请参见db.collection.explain()

解释对 findAndModify 和不同命令的支持

explain添加了对distinctfindAndModify命令的支持。有关更多信息,请参见explain

弃用 HTTP 接口

从 3.2 开始,MongoDB 弃用其 HTTP 接口。

个键已检查的计数包括最后扫描的键

对于以executionStatsallPlansExecution模式运行的explain操作,explain output包含keysExamined统计信息,表示在索引扫描期间检查的索引键的数量。

在 3.2 之前的版本中,某些查询中的keysExamined计数不包含最后扫描的关键字。从 3.2 开始,此错误已得到纠正。有关更多信息,请参见~explain.executionStats.executionStages.inputStage.keysExamined`。

诊断日志和系统分析器将报告此统计信息。

Geospatial Optimization

MongoDB 3.2 引入了2dsphere indexes的第 3 版,该版本以更好的等级索引GeoJSON geometries。新版本提高了在较小区域内2dsphere index查询的性能。此外,对于2d indexes2dsphere indexes,对于密集数据集,geoNear 查询的性能已得到改善。

诊断数据捕获

为了便于 MongoDB 工程师分析 MongoDB 服务器行为,MongoDB 3.2 引入了诊断数据收集机制,用于定期将服务器统计信息记录到诊断文件中。默认情况下,该机制每隔 1 秒捕获一次数据。要修改间隔,请参见diagnosticDataCollectionPeriodMillis

MongoDB 在mongod实例的--dbpathstorage.dbPath下创建一个diagnostic.data目录。诊断数据存储在此目录下的文件中。

诊断文件的最大大小可通过diagnosticDataCollectionFileSizeMB配置,而diagnostic.data目录的最大大小可通过diagnosticDataCollectionDirectorySizeMB配置。

选择捕获间隔的默认值和最大大小是为了向 MongoDB 工程师提供有用的数据,而对性能和存储大小的影响最小。通常,这些值仅需要按 MongoDB 工程师的要求进行修改才能用于特定的诊断目的。

Write Concern

journalCommitInterval for WiredTiger

MongoDB 3.2 增加了对指定 WiredTiger 存储引擎的日志提交间隔的支持。请参阅--journalCommitInterval选项。在以前的版本中,该选项仅适用于 MMAPv1 存储引擎。

对于相应的配置文件设置,MongoDB 3.2 添加了storage.journal.commitIntervalMs设置并弃用了storage.mmapv1.journal.commitIntervalMs。弃用的storage.mmapv1.journal.commitIntervalMs设置充当新storage.journal.commitIntervalMs设置的别名。

影响兼容性的更改

MongoDB 3.2 的某些更改可能会影响兼容性,并可能需要用户采取措施。有关兼容性更改的详细列表,请参见MongoDB 3.2 中的兼容性更改

Upgrade Process

有关完整的升级说明,请参见将 MongoDB 升级到 3.2

3.2.1 中的已知问题

3.2.1 版本中的已知问题列表:

3.2.0 中的已知问题

3.2.0 版本中的已知问题列表:

Download

要下载 MongoDB 3.2,请转到downloads page

首页