MongoDB 3.4 发行说明

在本页面

MongoDB 3.4 Released Nov 29, 2016

MongoDB 3.4 现在可用。关键功能包括线性化的阅读关注点,视图和排序规则。

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

Minor Releases

3.4.24-2020 年 1 月 27 日

Issues fixed:

3.4.23-2019 年 9 月 16 日

Issues fixed:

3.4.22-2019 年 8 月 6 日

Issues fixed:

Note

已解决的问题包括解决以下常见漏洞和披露(CVE)的问题:

3.4.21-2019 年 6 月 14 日

Issues fixed:

3.4.20-2019 年 3 月 13 日

Issues fixed:

3.4.19-2019 年 1 月 28 日

Issues fixed:

3.4.18-2018 年 11 月 7 日

Issues fixed:

3.4.17-2018 年 9 月 7 日

Issues fixed:

3.4.16-2018 年 7 月 10 日

Issues fixed:

3.4.15-2018 年 5 月 16 日

Issues fixed:

3.4.14-2018 年 3 月 20 日

Issues fixed:

3.4.13-2018 年 2 月 10 日

Issues fixed:

3.4.12-2018 年 2 月 8 日

Issues fixed:

3.4.11-2018 年 1 月 31 日

Issues fixed:

3.4.10-2017 年 10 月 31 日

Issues fixed:

3.4.9-2017 年 9 月 11 日

Issues fixed:

3.4.7 – 2017 年 8 月 8 日

Issues fixed:

3.4.6 – 2017 年 7 月 5 日

Issues fixed:

3.4.5 – 2017 年 6 月 14 日

Issues fixed:

3.4.4 – 2017 年 4 月 21 日

Issues fixed:

3.4.3 – 2017 年 3 月 28 日

Issues fixed:

3.4.2 – 2017 年 2 月 1 日

Issues fixed:

3.4.1 – 2016 年 12 月 20 日

Issues fixed:

Sharded Cluster

Membership Awareness

从 3.4 开始,分片群集组件(分片,配置服务器,mongos实例)可以识别它们在分片群集中的成员身份,包括分片群集的名称,配置服务器的位置。

为了支持这种意识:

Note

具有shardsvr角色的mongod个实例的默认端口是27018。要使用其他端口,请指定net.port设置或--port选项。

Config Server Primary 上的 Balancer

平衡器进程已从mongos移到配置服务器副本集的主要成员。与此更改相关联:

Faster Balancing

从 MongoDB 3.4 开始:

取消对 SCCC Config 服务器的支持

3 .4 分片群集不再支持将镜像(SCCC)mongod实例用作配置服务器。 3.2 版本中弃用的 SCCC 配置服务器的使用不再有效。而是将您的配置服务器部署为副本集(CSRS)。

要将分片群集升级到版本 3.4,配置服务器必须作为副本集运行。

要将现有的配置服务器从 SCCC 转换为 CSRS,请参见将配置服务器升级到副本集

Sharding Zones

MongoDB 3.4 引入了Zones,它取代了早期版本中可用的标记感知分片。

为了支持区域,MongoDB 引入了以下命令和mongo Shell 帮助器:

Commands mongo Shell 方法
addShardToZone sh.addShardToZone()
removeShardFromZone sh.removeShardFromZone()
updateZoneKeyRange sh.updateZoneKeyRange()

sh.removeRangeFromZone()

Replica Set

多数写问题的默认日记记录行为

新的副本集配置设置writeConcernMajorityJournalDefault确定是否在大多数投票成员将写操作应用于内存或磁盘日志上后,是否返回对majority写关注的确认**如果在写关注中未指定j选项。

新当选小学的可调追赶期

新的副本集配置设置settings.catchUpTimeoutMillis定义了新当选的主副本赶上可能具有更近期写入操作的其他副本集成员的时间限制。

可线性化的读取问题

MongoDB 3.4 引入了读取关注级别"linearizable"来读取数据,该数据反映了在读取操作开始之前以"majority" 发出的所有成功写入。可线性化的读取关注保证仅在读取操作指定唯一标识单个文档的查询过滤器时适用。

可线性化的读取关注点可用于所有受 MongoDB 支持的storage engines

结合"majority"写入关注点和"linearizable"读取关注点,可使多个线程对单个文档执行读写操作,就好像单个线程实时执行了这些操作一样;也就是说,这些读写的相应计划被认为是线性的。

具有线性化读取关注点的读取可能比具有"majority""local"读取关注点的读取慢得多。万一大部分数据承载成员不可用,请始终使用maxTimeMS并具有可线性化的读取注意事项。例如:

db.restaurants.find( { _id: 5 } ).readConcern("linearizable").maxTimeMS(10000)

db.runCommand( {
     find: "restaurants",
     filter: { _id: 5 },
     readConcern: { level: "linearizable" },
     maxTimeMS: 10000
} )

有关阅读关注的更多信息,包括支持阅读关注的操作,请参阅Read Concern

改进了初始同步

有关详细信息,请参见初始同步和 renameCollection

db.adminCommand( { replSetGetStatus: 1, initialSync: 1 } )

Decimal Type

3 .4 使用新的decimal数据类型添加了对decimal128 format的支持。十进制 128 格式支持最多 34 个十进制数字(即有效数字)和-6143 至 6144 的指数范围的数字。

为了支持该格式,mongo shell 添加了NumberDecimal包装器。

db.inventory.insert( {_id: 1, item: "The Scream", price: NumberDecimal("9.99"), quantity: 4 } )

在不同数值类型之间执行comparisons时,MongoDB 会对确切存储的数值进行比较,而无需先将值转换为通用类型。

与仅存储近似十进制值的double数据类型不同,decimal数据类型存储精确值。例如,decimal NumberDecimal("9.99")的精确值为9.99,其中双精度9.99的近似值为9.9900000000000002131628...

要测试decimal类型,请使用带有 Literals"decimal"19$type运算符。

db.inventory.find( { price: { $type: "decimal" } } )

要将新的decimal数据类型与 MongoDB 驱动程序一起使用,必须升级到支持该功能的驱动程序版本。

Aggregation

递归搜索的新聚合阶段

3 .4 为aggregation pipeline引入了一个阶段,该阶段允许进行递归搜索。

Stage Description
$graphLookup 对集合执行递归搜索。在每个输出文档中,添加一个新的数组字段,其中包含对该文档的递归搜索的遍历结果。

多面搜索的新汇总阶段

分面搜索允许将文档分类为分类。例如,给定一个清单文件集合,您可能希望按单个类别(例如,价格范围)或多个类别(例如,价格范围)以及部门分别对项目进行分类。

3 .4 为aggregation pipeline引入了可进行多面搜索的阶段。

新的汇总阶段,以方便重塑文档

3 .4 向aggregation pipeline引入了一些阶段,以方便替换文档以及添加新字段。

Stage Description
$addFields 将新字段添加到文档。该阶段输出包含 Importing 文档中所有现有字段以及新添加的字段的文档。
$replaceRoot 用指定的文档替换文档。您可以指定 Importing 文档中嵌入的文档,以将嵌入的文档提升到顶层。

要计算的新汇总阶段

3 .4 为aggregation pipeline引入了一个新的阶段,可以方便计数文件。

Stage Description
$count 返回一个文档,其中包含 Importing 到阶段的文档数量的计数。

新的聚合阵列运算符

Operator Description
$in 返回一个布尔值,该值指示指定的值是否在数组中。
$indexOfArray 在数组中搜索指定值的出现,并返回第一个出现的数组索引(从零开始)。
$range 返回一个数组,其元素是生成的数字序列。
$reverseArray 返回一个输出数组,其元素与 Importing 数组的元素相反,但 Sequences 相反。
$reduce 将数组作为 Importing,并将表达式应用于数组中的每个元素,以返回表达式的最终结果。
$zip 返回一个输出数组,其中每个元素本身就是一个数组,由 Importing 数组中相应数组索引位置中的元素组成。

新的聚合字符串运算符

Operator Description
$indexOfBytes 在字符串中搜索子字符串的出现,并返回第一次出现的 UTF-8 字节索引(从零开始)。
$indexOfCP 在字符串中搜索子字符串的出现,并返回第一次出现的 UTF-8 code point索引(从零开始)。
$split 通过指定的定界符将字符串拆分为字符串成分,然后返回字符串成分的数组。
$strLenBytes 返回字符串的 UTF-8 字节数。
$strLenCP 返回字符串的 UTF-8 code points的数目。
$substrBytes 返回字符串的子字符串。子字符串以字符串中指定长度的指定 UTF-8 字节索引(从零开始)处的字符开头。
$substrCP 返回字符串的子字符串。子字符串以字符串中指定的 UTF-8 code point索引(从零开始)处的字符开头。

新的聚合控制流表达式

Operator Description
$switch 按 Sequences 评估指定分支的case表达式,以进入第一个分支,case表达式对其求值为true

新的日期汇总运算符

Operator Description
$isoDayOfWeek 返回 ISO 8601 工作日编号,范围从1(星期一)到7(星期日)。
$isoWeek 返回 ISO 8601 周号,范围从153。星期编号从1开始,其中包含该年的第一个星期四的星期(星期一至星期日)。
$isoWeekYear 返回 ISO 8601 年号,其中年份从第 1 周的星期一(ISO 8601)开始,到最后一周的星期日(ISO 8601)结束。

新的监视汇总源

Operator Description
$collStats 返回有关集合或视图的统计信息。

新型运算符

Operator Description
$type 返回指定参数BSON Types的字符串。

Additional Changes

$project阶段在输出文档中添加了对字段排除的支持。以前,您只能在阶段中排除_id字段。如果您指定排除一个或多个字段,

排序规则和不区分大小写的索引

为了允许特定于语言的字符串比较规则,MongoDB 3.4 在其查询语言和索引中引入了collation

以下操作支持排序规则:

Commands mongo Shell 方法
create db.createCollection()

db.createView()
createIndexes [1] db.collection.createIndex() [1]
aggregate db.collection.aggregate()
distinct db.collection.distinct()
findAndModify db.collection.findAndModify()
db.collection.findOneAndDelete()
db.collection.findOneAndReplace()
db.collection.findOneAndUpdate()
find cursor.collation()db.collection.find()指定排序规则
mapReduce db.collection.mapReduce()
delete db.collection.deleteOne()
db.collection.deleteMany()
db.collection.remove()
update db.collection.update()
db.collection.updateOne(),
db.collection.updateMany(),
db.collection.replaceOne()
shardCollection sh.shardCollection()
db.collection.bulkWrite()中的个别更新,替换和删除操作。

有关详细信息,请参见Collation

[1] *(12)*某些索引类型不支持排序规则。有关详细信息,请参见排序规则和不支持的索引类型

Views

MongoDB 3.4 添加了对从现有集合或其他视图创建只读视图的支持。为了指定或定义视图,MongoDB 3.4 引入了:

db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )

或者为视图指定默认的collation

db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
db.createView(<view>, <source>, <pipeline>, <collation>)

有关创建视图的更多信息,请参见Views

Security Enhancement

过渡到身份验证

MongoDB 3.4 添加了对副本集和分片群集向内部身份验证的滚动过渡的支持。有关详细信息,请参见security.transitionToAuth设置和mongodmongos--transitionToAuth命令行选项。

用户角色更改

以下内置角色的特权不再适用于localconfig数据库:

readAnyDatabase 从 3.4 开始,要在local数据库上提供read特权,请在admin数据库中创建一个用户,该用户在local数据库中具有read角色。另请参见clusterManagerclusterMonitor角色以访问configlocal数据库。
readWriteAnyDatabase 从 3.4 开始,要在local数据库上提供readWrite特权,请在admin数据库中创建一个用户,该用户在local数据库中具有readWrite角色。另请参见clusterManagerclusterMonitor角色以访问configlocal数据库。
userAdminAnyDatabase
dbAdminAnyDatabase 从 3.4 开始,要在local数据库上提供dbAdmin特权,请在admin数据库中创建一个用户,该用户在local数据库中具有dbAdmin角色。另请参见clusterManagerclusterMonitor角色以访问configlocal数据库。

相应地,以下内置角色包括对localconfig数据库的其他读取和写入特权:

MongoDB Tools

mongoreplay

MongoDB 引入了mongoreplay,它是代替mongosniff的工作负载捕获和分析工具。您可以使用mongoreplay来检查和记录发送到 MongoDB 实例的命令,然后在以后将命令重播到另一台主机上。

mongoreplay适用于 Linux 和 macOS。

General Enhancements

MongoDB 3.4 包括以下增强功能:

db.currentOpdatabase profiler报告所有 CRUD 操作的相同基本诊断信息,包括以下内容:

这些操作也包含在慢查询的日志 Logging(有关慢查询的日志的更多信息,请参见slowOpThresholdMs)。

请参阅配置net.compression.compressors设置以及mongodmongosmongo shell 的--networkMessageCompressors选项。

Platform Support

对于支持 Ubuntu 16.04 POWER/PPC64LE 的 MongODB Enterprise 早期版本:

由于 Ubuntu 16.04 for POWER 的glibc软件包的较早版本中存在锁定清除错误,因此在运行 MongoDB 之前,必须将glibc软件包升级到至少glibc 2.23-0ubuntu5。使用glibc软件包的较旧版本的系统会由于随机内存损坏而导致数据库服务器崩溃和行为异常,并且不适合 MongoDB 的生产部署

以下总结了最新版本的 MongoDB 产品支持的体系结构:

Product x86_64/amd64 s390x POWER8(小尾数) ARMv8-A
MongoDB 3.4 仅 MongoDB Enterprise 仅 MongoDB Enterprise
BI Connector
Compass
Spark Connector
Ops Manager
Automation Agent
Monitoring Agent
Backup Agent

有关详细信息,请参阅产品的各个文档。

MongoDB 企业功能

Log Redaction

MongoDB Enterprise 添加了对日志编辑的支持,以与 MongoDB 的加密存储引擎结合使用。日志编辑可防止将潜在的敏感信息写入诊断日志;但是,由于缺少与日志事件相关的数据,因此对已编辑日志的诊断可能会更加困难。

要启用日志编辑,请参见security.redactClientLogData设置和mongod--redactClientLogData选项。

LDAP Enhancements

LDAP Authorization

MongoDB Enterprise 支持使用轻型目录访问协议(LDAP)服务进行授权(即确定访问权限)通过以下身份验证机制之一进行身份验证的用户:

有关更多信息,请参见LDAP Authorization

mongoldap

MongoDB Enterprise 提供了一个新工具mongoldap,用于针对正在运行的 LDAP 服务器或一组服务器测试您的 MongoDB LDAP 配置选项。配置与LDAP authentication相关的选项时,可以使用mongoldap以确保身份验证操作按预期进行。

通过 OS 库绑定

MongoDB 3.4 通过 os 库支持绑定到 LDAP 服务器。这使 Linux 和 Windows MongoDB 3.4 服务器可以使用 LDAP 服务器进行身份验证。

Linux MongoDB 部署 continue 通过saslauthd支持绑定。

影响兼容性的更改

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

Upgrade Procedures

如果您需要有关升级到 3.4 的指导,请MongoDB 提供主要版本升级服务以帮助确保平稳过渡而不会中断您的 MongoDB 应用程序。

Download

要下载 MongoDB 3.4,请转到MongoDB 下载中心

3.4.0 中的已知问题

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

首页