MongoDB 3.6 发行说明

在本页面

Minor Releases

3.6.19-2020 年 7 月 23 日

Issues Fixed:

3.6.18-2020 年 5 月 1 日

Issues fixed:

Note

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

3.6.17-2020 年 1 月 27 日

Issues fixed:

3.6.16-2019 年 12 月 6 日

Issues fixed:

3.6.15-2019 年 11 月 6 日

Issues fixed:

3.6.14-2019 年 8 月 26 日

Issues fixed:

Note

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

3.6.13-2019 年 6 月 10 日

Issues fixed:

Note

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

3.6.12-2019 年 4 月 8 日

Issues fixed:

3.6.11-2019 年 3 月 1 日

Issues fixed:

3.6.10-2019 年 1 月 22 日

Issues fixed:

3.6.9-2018 年 11 月 16 日

Issues fixed:

3.6.8-2018 年 9 月 19 日

Issues fixed:

3.6.7-2018 年 8 月 25 日

Issues fixed:

3.6.6-2018 年 7 月 10 日

Issues fixed:

3.6.5-2018 年 5 月 29 日

Issues fixed:

3.6.4-2018 年 4 月 13 日

Issues fixed:

3.6.3-2018 年 2 月 23 日

Issues fixed:

3.6.2-2018 年 1 月 10 日

Issues fixed:

  • SERVER-31267:如果在 getMore 调用之间删除收集,则 CollectionCloner 失败。

  • SERVER-31625:使用 LDAP 服务器查询组时,需要转义Unknown macro: {USER}的内容。

  • SERVER-31684:带有 updateLookup 的$ changeStream 中的 QueryPlanKilled(操作超出时间限制)。

  • SERVER-31982:分片不会以多数 writeConcern 调用配置提交块迁移命令,也不会检查 writeConcern 错误。

  • SERVER-32246:v3.6 上的 PID 文件权限使其无法使用 pid 文件进行监视。

  • SERVER-32255:分片本地本地集合中可能没有 UUID。

  • SERVER-32282:即使在分片群集中以多个分片为目标时,聚合文本搜索也可以返回文本分数,即使没有要求也是如此。

  • SERVER-32396 mongo Shell 无法使用 3.6 连接字符串 SRV 连接

  • SERVER-32430:如果存在非简单的排序规则,DocumentSourceSort 会错误地对数组文档进行排序。

  • SERVER-32529:需要为碎片使用 replSet 会中断可查询的备份。

  • 所有 JIRA 问题均已在 3.6.2 中关闭

  • 3.6.2 Changelog

3.6.1-2017 年 12 月 26 日

Issues fixed:

Security

默认绑定到 localhost

从 MongoDB 3.6 开始,MongoDB 二进制文件mongodmongos默认绑定到localhost。从 MongoDB 版本 2.6 到 3.4,默认情况下,只有来自正式 MongoDB RPM(Red Hat,CentOS,Fedora Linux 和衍生产品)和 DEB(Debian,Ubuntu 和衍生产品)软件包的二进制文件会绑定到localhost。要了解有关此更改的更多信息,请参见Localhost 绑定兼容性更改

MONGODB-CR Deprecation

从 MongoDB 3.6 开始,不推荐使用MONGODB-CR身份验证机制。如果尚未将MONGODB-CR身份验证架构升级到 SCRAM,请参见升级到 SCRAM

Authentication Restrictions

为了将数据库用户连接限制为指定的 IP 地址,将authenticationRestrictions参数添加到以下内容:

CommandsMethods
createUserdb.createUser()
updateUserdb.updateUser()
createRoledb.createRole()
updateRoledb.updateRole()

其他安全增强功能

Aggregation

从 MongoDB 3.6 开始,以下功能可用。

更富有表现力的$ lookup

$lookup通过允许对联接的集合进行变量指定和管道执行,增加了对指定多个联接条件以及不相关的子查询的支持。

有关详细信息,请参见联接条件和不相关的子查询$lookup语法。

新的聚集阶段

MongoDB 3.6 添加了以下新的聚合管道阶段:

OperatorDescription
$currentOp返回包含有关mongod实例上的活动和/或休眠操作的信息的文档流。使用新的聚合助手db.aggregate()
$listSessions列出config数据库中system.sessions集合中的服务器会话。使用新的聚合帮助器db.aggregate()
$listLocalSessions列出服务器缓存在内存中的服务器会话。

新的汇总运算符

OperatorDescription
$arrayToObject将键值对数组转换为文档。
$objectToArray将文档转换为代表键值对的文档数组。
$mergeObjects将多个文档合并为一个文档。
$dateFromString将日期/时间字符串转换为日期对象。
$dateFromParts给定日期的组成部分,构造一个 BSON Date 对象。
$dateToParts返回包含日期组成部分的文档。

新的聚合助手

MongoDB 3.6 添加了一个助手db.aggregate(),以执行不依赖于基础集合的聚合,例如以$currentOp$listLocalSessions开头的聚合。

新的汇总变量

REMOVE允许有条件地排除字段。

New Options

aggregate命令和db.collection.aggregate()方法支持以下新选项:

  • hint选项以指定要使用的索引。

Note

hint不适用于$lookup$graphLookup阶段。

  • comment选项可帮助通过数据库事件探查器,currentOp 和日志跟踪操作。

支持时区

MongoDB 3.6 将对时区的支持添加到汇总日期运算符

数组更新运算符增强

arrayFilters

以下命令和方法可以接受arrayFilters参数,以指定要在数组字段中修改的元素:

CommandsMethods
findAndModifydb.collection.findOneAndUpdate()

db.collection.findAndModify()
updatedb.collection.updateOne()
db.collection.updateMany()
db.collection.update()
db.collection.bulkWrite() updateOne 和 updateMany 操作
Bulk.find.arrayFilters()用于Bulk()操作方法updateOne()update()

多元素阵列更新

MongoDB 3.6 添加了以下新的位置运算符,用于对数组和嵌套数组的更新操作:

  • 全位置$[]运算符将更新数组中的所有元素。

  • 过滤后的位置$[<identifier>]运算符会更新数组中与arrayFilters条件匹配的所有元素。

用于推送的负数组索引位置

push更新运算符的$position修饰符可以接受负数组索引值,以指示从数组末尾开始的位置。

3.6 兼容的驱动程序

以下驱动程序与 MongoDB 3.6 兼容:

Java 3.6+

Python 3.6+
C 1.9
C#2.5
Node 3.0+
Ruby 2.5
Perl 2.0
PHPC 1.4+
Scala 2.2+

DNS 构造的种子列表 mongodb srv

除标准连接格式外,3.6 驱动程序还支持 DNS 构造的种子列表。有关更多信息,请参见DNS 种子列表连接格式

Change Streams

MongoDB 3.6 支持针对具有副本集分片的副本集和分片集群打开变更流。

更改流允许应用程序访问实时数据更改,而不会带来复杂性和拖尾oplog的风险。应用程序可以使用变更流来订阅集合中的所有数据变更,并对这些变更做出响应。

您可以使用db.collection.watch()方法从任何 3.6 系列驱动程序打开更改流。有关使用的完整说明,请参见首选驱动程序的文档。

有关更多信息,请参见Change Streams

Important

要使用变更流,必须将featureCompatibilityVersion设置为“ 3.6”。有关更多信息,请参见View FeatureCompatibilityVersionsetFeatureCompatibilityVersion

Client Sessions

Causal Consistency

为了提供因果一致性,MongoDB 3.6 在client sessions中启用了causal consistency。因果一致的 Client 端会话表示读取和“确认”写入操作的关联序列具有因果关系,这种因果关系由它们的 Sequences 反映出来。Client 端应用程序必须确保一次只有一个线程在 Client 端会话中执行这些操作。

应用程序可以启动client session并将操作与特定会话相关联。应用程序必须确保一次只有一个线程在 Client 端会话中执行这些操作。

Important

要使用 Client 端会话:

Retryable Writes

Important

对于可重试的写入:

从 MongoDB 3.6 开始,副本集和分片群集上的某些公认的写操作是“可重试”的,以提供对瞬态网络错误或副本集选择的处理。

通过可重试的写入,MongoDB 驱动程序在遇到网络错误或遇到副本集故障转移时自动重试这些操作,在此期间副本集没有主副本。要为 3.6 驱动程序启用可重试写入,请参见retryWrites

由于仅尝试一次重试,因此可重试功能可以帮助解决瞬态网络错误,但不能解决持久性网络错误。

有关可重试写入的更多信息,请参见Retryable Writes

mongo Shell 更改

MongoDB 3.6 将新的命令行选项--retryWrites添加到mongo shell。该选项在mongo shell 中启用Retryable Writes

以下新方法已添加到mongo shell 中的Mongo()连接对象:

Server Sessions

MongoDB 的服务器会话或逻辑会话是client sessions用于支持Causal Consistencyretryable writes的基础框架。

Important

应用程序使用client sessions连接服务器会话。

服务器会话可用于独立的mongod实例,副本集和分片群集。

服务器会话命令

从 3.6 开始,MongoDB 驱动程序将所有操作与服务器会话相关联,但未确认的写入除外。如果部署强制执行身份验证/授权,则服务器会话将与经过身份验证的用户关联。

以下命令可用于列出,Management 和终止整个 MongoDB 集群中的服务器会话:

CommandsDescriptions
endSessions使指定的服务器会话到期。
killAllSessions杀死所有服务器会话。
killAllSessionsByPattern杀死所有与指定模式匹配的服务器会话。
killSessions终止指定的服务器会话。
refreshSessions刷新空闲服务器会话。
startSession开始新的服务器会话。

Parameters

以下新参数可用于服务器会话:

Aggregation Stages

为了支持服务器会话,MongoDB 3.6 添加了以下新的聚合管道阶段:

OperatorDescription
$listSessions列出config数据库中system.sessions集合中的服务器会话。
$listLocalSessions列出服务器缓存在内存中的服务器会话。使用新的聚合帮助器db.aggregate()

General

serverStatus返回有关logicalSessionRecordCache的信息。

Command Options

从 3.6 开始,MongoDB 驱动程序将所有操作与服务器会话相关联,但未确认的写入除外。以下选项可用于所有命令以支持与服务器会话的关联:

Important

mongo shell 和驱动程序将这些选项分配给会话中的命令。

OptionTypeDescription
lsidDocument指定与命令关联的会话的唯一 ID 的文档。如果指定了txnNumber,则需要lsid
txnNumber64-bit integer严格增加的非负数,用于在命令会话中唯一标识该命令。


如果指定,该命令还必须包含lsid选项。

对于采用语句数组的deleteinsertupdate命令,还可以使用以下选项:

Important

不要手动设置stmtIds。 MongoDB 将stmtIds设置为严格增加的非负数。

OptionTypeDescription
stmtIds32 位整数数组在写命令中唯一标识其各自写操作的数字数组。

JSON Schema

MongoDB 3.6 使用 JSON 模式将$jsonSchema运算符添加为支持document validation。有关详细信息,请参见$jsonSchema

要使用$jsonSchema,必须将featureCompatibilityVersion设置为“ 3.6”。

Replica Sets

Sharded Clusters

  • 从 3.6 开始,分片必须是副本集。要将分片群集升级到版本 3.6,分片服务器必须作为副本集运行。

要将现有的分片独立实例转换为分片副本集,请参见将分片独立版转换为分片副本集

  • 从 3.6 开始,分片副本集的所有成员(不仅是主副本)都维护有关块元数据的元数据。当不使用"available"读取关注点时,这可以防止来自辅助节点的读取返回orphaned data

  • mongos添加了ShardingTaskExecutorPoolMaxConnecting参数,以控制mongosmongod实例添加连接的速率。

  • 添加了orphanCleanupDelaySecs,该参数确定从源碎片中删除已迁移的块之前的最小延迟。

  • 现在可以将config数据库中的config.system.sessions集合进行分片。

General Enhancements

MongoDB 罗盘包装

MongoDB Server 下载与特定于平台的installation script打包为MongoDB 罗盘社区版打包在一起。此脚本在 MongoDB 服务器安装过程中安装 MongoDB Compass。

Collection Identifier

集合具有不变的unique identifierfeatureCompatibilityVersion必须设置为"3.6"

新查询运算符

MongoDB 3.6 添加了以下新的查询运算符:

  • 新的$jsonSchema运算符将匹配根据给定 JSON 模式验证的文档。要使用$jsonSchema,必须将featureCompatibilityVersion设置为“ 3.6”。

  • $expr允许在查询语言中使用聚合表达式。

Removed Operators

MongoDB 3.6 删除了弃用的$pushAll更新运算符。有关更多信息,请参见删除$ pushAll 更新运算符

Indexes

  • 索引可以涵盖对嵌套文档中的字段的查询。

  • 如果索引跟踪哪些字段使其成为多键,则多键索引可以覆盖非数组键的查询。

  • 创建索引时,不能指定*作为索引名称。参见索引命名为*

Commands

  • listDatabases命令添加了以下选项:

  • nameOnly仅返回数据库名称(不需要数据库锁),而不是同时返回数据库名称和大小信息(不需要数据库锁)。

    • filter返回与输出上指定的匹配条件匹配的数据库。
  • 修改了validate命令和db.collection.validate()方法的行为,以使 WiredTiger 存储引擎仅对于full验证才强制执行检查点,将所有内存中数据刷新到磁盘,然后验证磁盘上的数据。另请参见validate Operation

  • updatedelete<database>.system.profile条目包含应用于命名集合的整个更新/删除文档。

  • dropDatabaseawait,直到数据库中的所有集合删除都传播到大多数副本集成员为止。

  • 对于在副本集和分片群集上运行的命令,响应文档包括operationTime$clusterTime。参见db.runCommanddb.adminCommand

  • 弃用的getPrevError命令。

有线协议和压缩

  • MongoDB 3.6 引入了一个新的wire protocol操作码OP_MSG。此操作码的消息格式是可扩展的,旨在包含其他操作码的功能。

  • MongoDB 3.6 为--networkMessageCompressors选项(或使用配置文件的net.compression.compressors设置)添加了对zlib压缩器的支持。 --networkMessageCompressors选项(或net.compression.compressors设置)启用网络压缩,以在mongodmongosmongo Shell 和支持OP_COMPRESSED消息格式的驱动程序之间进行通信。

  • 默认情况下,mongodmongos启用网络压缩,并以snappy作为压缩器。有关网络压缩的更多信息,请参见net.compression.compressors

Read Concern

  • 新的"available"阅读关注可用。对于未分片的集合(包括独立部署或副本集部署中的集合),"local""available"的读取关注点行为相同。对于分片群集,"available"为分区提供了更大的容忍度,但是如果分片正在进行块迁移,则"available"可能会返回孤立文档。

有关更多信息,请参见禁用多数阅读关注

FTDC

MongoDB 3.6 在mongos中添加了对 Diagnostics Capture(也称为FTDC)的支持。 [1]在以前的版本中,此功能仅适用于mongod。参见Diagnostic Parameters

Note

FTDC 默认情况下处于启用状态。

[1]MongoDB 3.4.14 还添加了对 FTDC 的mongos支持。

Additional Enhancements

MongoDB 3.6 包括以下增强功能:

  • 添加了对使用--bind_ip指定完整 Unix 域套接字路径的支持。

  • mongod现在提供了--timeZoneInfo选项。使用此选项可以指定系统时区数据库的路径。 Linux 和 macOS 软件包随附的默认配置文件将其设置为/usr/share/zoneinfo

  • 日期操作现在在所有受支持的 os 上接受一致的日期范围。您可以安全地使用09999范围内的年份。

  • mongod的新honorSystemUmask启动选项使 MongoDB 创建的新文件具有运行mongod进程的用户的umask指定的读/写权限。仅在 Linux 和 macOS 系统上可用。

  • 数据库的maxWriteBatchSize限制(表示写批处理中允许的最大写操作数)从1,000增加到100,000

  • planCacheListPlans数据库命令产生的输出与PlanCache.getPlansByQuery() shell 方法产生的输出相同。这两个操作的输出现在都包括计划生成时间的时间戳。

  • 新的KeysRotationIntervalSec服务器参数指定HMAC 签名密钥在旋转到下一个秒之前有效的秒数。

  • find命令的选项oplogReplay现在支持$eq运算符。

影响兼容性的更改

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

Upgrade Procedures

Feature Compatibility Version 3.4

要升级,3.4 实例必须将featureCompatibilityVersion设置为 3.4. 要检查版本:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

有关验证和设置featureCompatibilityVersion的特定详细信息以及有关升级的其他先决条件/注意事项的信息,请参阅各个升级说明:

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

Download

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

3.6.3 中的已知问题

    • WT-3724:

    • MongoDB 3.6 尚未在 macOS 10.13 中的新文件系统 APFS 上进行测试,可能会遇到错误。

  • 构建内存结构的操作因果关系不一致;但是,只有某些操作与因果一致的会话相关联时会返回错误。参见因果一致性限制

3.6.2 中的已知问题

    • SERVER-31760:

    • $expr不使用索引与字段进行相等匹配,包括与外部管道一起用作$lookup聚合阶段的一部分时。

    • WT-3724:

    • MongoDB 3.6 尚未在 macOS 10.13 中的新文件系统 APFS 上进行测试,可能会遇到错误。

  • 构建内存结构的操作因果关系不一致;但是,只有某些操作与因果一致的会话相关联时会返回错误。参见因果一致性限制

3.6.1 中的已知问题

    • SERVER-31760:

    • $expr不使用索引与字段进行相等匹配,包括与外部管道一起用作$lookup聚合阶段的一部分时。

    • WT-3724:

    • MongoDB 3.6 尚未在 macOS 10.13 中的新文件系统 APFS 上进行测试,可能会遇到错误。

  • 构建内存结构的操作因果关系不一致;但是,只有某些操作与因果一致的会话相关联时会返回错误。参见因果一致性限制

3.6.0 中的已知问题

    • SERVER-31760:

    • $expr不使用索引与字段进行相等匹配,包括与外部管道一起用作$lookup聚合阶段的一部分时。

    • TOOLS-1827:

    • 当将 URI 与 SRV 一起使用时,如果在命令行 URI 中未指定查询参数,则提取的 TXT 记录将被忽略。要解决此问题,请在 URI 查询字符串中显式指定用于与数据库通信的 TLS/SSL 设置(ssl = true 或 ssl = false)。

    • WT-3724:

    • MongoDB 3.6 尚未在 macOS 10.13 中的新文件系统 APFS 上进行测试,可能会遇到错误。

  • 构建内存结构的操作因果关系不一致;但是,只有某些操作与因果一致的会话相关联时会返回错误。参见因果一致性限制

报告问题

要报告问题,请参阅https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports,以获取有关如何为 MongoDB 服务器或相关项目之一提交 JIRA 票证的说明。