MongoDB 3.6的发布说明

安全

默认绑定到Localhost

MongoDB二进制文件,mongodmongos,默认绑定到localhost

MONGODB-CR被弃用

从MongoDB 3.6开始,MONGODB-CR身份验证机制已被弃用。如果您尚未将MONGODB-CR身份验证模式升级到SCRAM,请参阅升级到SCRAM。

身份验证限制

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

命令 方法
createUser db.createUser()
updateUser db.updateUser()
createRole db.createRole()
updateRole db.updateRole()

额外的安全增强功能

另见:

向后不兼容的功能

集合

从MongoDB 3.6开始,提供以下功能。

更具表现力$lookup

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

有关详细信息,请参阅加入集合上加入条件和子查询的$lookup语法

新的聚合阶段img

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

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

新的聚合运算符

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

新的聚合助手

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

新的聚合变量

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

新选项

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

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

    笔记:

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

  • comment帮助通过数据库分析器、currentOp和日志跟踪操作的选项。

对时区的支持

MongoDB 3.6为聚合日期运算符增加了对时区的支持

另见:

聚合兼容性变化

数组更新运算符增强

arrayFilters

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

命令 方法
findAndModify db.collection.findOneAndUpdate()db.collection.findAndModify()
update db.collection.updateOne()db.collection.updateMany()db.collection.update()
db.collection.bulkWrite()用于更新一个和更新许多操作Bulk.find.arrayFilters()对于Bulk()操作方法updateOne()update()

多元素数组更新

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

负数组索引位置push

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

3.6 兼容驱动程序

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

Java 3.6+ C# 2.5+ Perl 2.0+
Python 3.6+ Node 3.0+ PHPC 1.4+
C 1.9+ rubt 2.5+ Scala 2.2+
Go 1.8+ Rust 2.1+ C++ 3.6.6+
Swift 1.2+

DNS构建的种子列表mongodb+srv

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

更改流

MongoDB 3.6支持针对复制集和带有复制集碎片的碎片集群打开更改流。

更改流允许应用程序访问实时数据更改,而无需尾随操作日志的复杂性和风险。应用程序可以使用更改流订阅集合上的所有数据更改,并响应这些更改。

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

有关更多信息请参阅更改流

重要:

要使用更改流,featureCompatibilityVersion必须设置为“3.6”。有关更多信息,请参阅Get FeatureCompatibilityVersionsetFeatureCompatibilityVersion

客户会话

因果一致性

为了提供因果一致性,MongoDB 3.6在客户端会话中实现因果一致性。因果一致的客户端会话表示,关联的读取和确认写入操作序列具有因果关系,这反映在其排序上。客户端应用程序必须确保一次只有一个线程在客户端会话中执行这些操作。

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

重要:

要使用客户端会话:

可重试写入

重要:

对于可重试写:

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

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

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

有关可重试写入的更多信息,请参阅可重试写入。

mongoshell变化

mongoDB 3.6将新的命令行选项--rety Writes添加到mongo shell中。该选项在mongo shell中启用可重试写入。

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

服务器会话

MongoDB的服务器会话或逻辑会话是客户会话支持因果一致性可重试写。

重要:

应用程序使用客户会话与服务器会话接口。

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

服务器会话命令

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

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

命令 描述包含
endSessions 过期指定的服务器会话。
killAllSessions 终止所有服务器会话。
killAllSessionsByPattern 杀死所有与指定模式匹配的服务器会话。
killSessions 终止指定的服务器会话。
refreshSessions 刷新空闲的服务器会话。
startSession 启动新的服务器会话。

参数

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

聚合阶段

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

运算符号 描述
$listSessions config数据库中列出system.sessions集合中的服务器会话。
$listLocalSessions 列出服务器缓存在内存中的服务器会话。使用新的聚合助手db.aggregate()

一般的

serverStatus返回有关逻辑SessionRecordCache数量的信息

命令选项

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

重要:

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

选项 类型 描述
lsid 文件 指定与命令关联的会话的唯一ID的文档。如果指定了txnNumber,则需要lsid
txnNumber 64位整数 一个严格增加的非负数,在命令会话中唯一标识命令。如果指定,该命令还必须包含lsid

对于deleteinsertupdate需要一系列语句的命令,还提供以下选项:

重要:

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

选项 类型 描述
stmtIds 32位整数数组 在写入命令中唯一标识其各自写入操作的数字数组。

JSON模式

MongoDB 3.6添加了$jsonSchema运算符,以支持使用JSON Schema进行文档验证。有关详细信息,请参阅$jsonSchema

要使用$jsonSchemafeatureCompatibilityVersion必须设置为“3.6”。

另见:

向后不兼容的功能

复本集

分片集群

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

    要将现有的碎片独立实例转换为碎片副本集,请参阅将碎片独立转换为碎片副本集。

  • 从3.6开始,碎片副本集的所有成员,而不仅仅是主副本,都维护有关块元数据的元数据。这防止了次要读取在不使用"available"读取关注时返回孤儿数据

  • 添加了mongosShardingTaskExecutorPoolMaxConnecting参数,以控制mongosmongod实例添加连接的速度。

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

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

一般增强功能

MongoDB指南针包装

MongoDB Server下载包含特定于平台的安装脚本MongoDB指南针社区版。此脚本安装MongoDB指南针,作为MongoDB服务器安装过程的一部分。

集合标识符

集合具有不可变的唯一标识符featureCompatibilityVersion必须设置为"3.6"

另见:

向后不兼容的功能

新的查询运算符

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

  • 新的$jsonSchema运算符匹配验证给定JSON模式的文档。要使用$jsonSchemafeatureCompatibilityVersion必须设置为“3.6”。
  • $expr允许在查询语言中使用聚合表达式。

另见:

向后不兼容的功能

删除的操作符

mongoDB 3.6删除已弃用的$pushAll更新操作符。有关详细信息,请参阅 Remove $pushAll Update Operator.

索引

  • 索引可以覆盖嵌套文档中字段的查询。
  • 如果索引跟踪哪些字段使其成为多键,多键索引可以覆盖对非数组键的查询。
  • 创建索引时,您无法将*指定为索引的名称。请参阅名为*的索引。

命令

  • listDatabases命令中添加了以下选项:
    • nameOnly仅返回数据库名称(不需要数据库锁),而不是同时返回数据库名称和大小信息(这确实需要数据库锁)。
    • filter返回与输出上指定匹配条件匹配的数据库。
  • 修改了validate命令和thedbdb.collection.validate()方法的行为,使WiredTiger存储引擎仅用于full验证,强制检查点,将所有内存数据刷新到磁盘,然后验证磁盘上的数据。另见validate操作。
  • 用于updatedelete<database>.system.profile条目包含应用于命名集合的整个更新/删除文档。
  • dropDatabase等到数据库中的所有集合都已传播到大多数副本集成员。
  • 对于在副本集和分片集群上运行的命令,响应文档包括operationTime$clusterTime。请参阅db.runCommand()db.adminCommand())。
  • 不建议使用的getPrev错误命令。

有线协议和压缩

  • MongoDB 3.6引入了一种名为OP_MSG的新有线协议操作码。此操作码的消息格式是可扩展的,旨在包含其他操作码的功能。
  • MongoDB 3.6 增加了对 zlib compressor 和--networkMessageCompressors 选项的支持 (如果使用配置文件,则为net.compression.compressors 设置). --networkMessageCompressors选项(或net.compression.compressors 设置) 允许在mongod, mongos, mongoshell, 和支持 OP_COMPRESSED 消息格式的驱动程序之间进行网络压缩。
  • mongodmongos默认启用网络压缩,以snappy为压缩机。有关网络压缩的更多信息,请参阅net.compression.compressors

阅读关注

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

    另见:

    orphanCleanupDelaySecs

  • 从MongoDB 3.6开始,MongoDB支持"多数"默认情况下读取关注。

    对于MongoDB 3.6.1 - 3.6.x,您可以禁用读取关注"多数"防止存储缓存压力使用主-次级仲裁器(PSA)架构固定部署。致残"多数"阅读关注也会禁用对更改流

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

FTDC

MongoDB 3.6增加了对mongos诊断捕获(也称为FTDC)的支持。[1]在以前的版本中,该功能仅适用于mongod。请参阅诊断参数。

笔记:

默认情况下启用FTDC。

MongoDB 3.4.14+还增加了mongos对FTDC的支持。

其他增强功能

MongoDB 3.6包括以下增强功能:

  • 添加了对使用--bind_ip指定完整的Unix域套接字路径的支持。
  • mongod现在提供了一个--timeZoneInfo选项。使用此选项指定系统时区数据库的路径。Linux和macOS软件包中包含的默认配置文件将其设置为/usr/share/zoneinfo
  • 日期操作现在在所有受支持的操作系统中接受一致的日期范围。您可以安全地在09999之间工作。
  • mongod的新honorSystemUmask启动选项导致MongoDB创建的新文件具有由乌马斯克运行mongod进程的用户。仅适用于Linux和macOS系统。
  • 数据库的maxWriteBatchSize限制,表示写入批次中允许的最大写入操作数量,从1,000增加到100,000
  • planCacheListPlans 数据库命令生成与PlanCache.getPlansByQuery() shell 方法相同的输出。 这两个操作的输出现在都包含了生成计划的时间戳。
  • 新的KeysRotationIntervalSec服务器参数指定了HMAC签名密钥在旋转到下一个之前是有效的。
  • find命令的选项oplogReplay现在支持$eq运算符。

影响兼容性的变化

一些更改可能会影响兼容性,可能需要用户采取行动。有关兼容性更改的详细列表,请参阅MongoDB 3.6中的兼容性更改。

升级程序

重要:

功能兼容性版本3.4

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

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

有关验证和设置featureCompatibilityVersion的具体详细信息,以及有关升级的其他先决条件/考虑的信息,请参阅单独的升级说明:

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

下载

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

另见:

所有第三方许可通知

3.6.3中的已知问题

  • WT-3724

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

  • 构建内存结构的操作因果一致;然而,只有一些操作在与因果一致会话相关联时返回错误。请参阅因果一致性限制。

3.6.2中的已知问题

  • 服务器-31760

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

  • WT-3724

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

  • 构建内存结构的操作因果一致;然而,只有一些操作在与因果一致会话相关联时返回错误。请参阅因果一致性限制。

3.6.1中的已知问题

  • 服务器-31760

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

  • WT-3724

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

  • 构建内存结构的操作因果一致;然而,只有一些操作在与因果一致会话相关联时返回错误。请参阅因果一致性限制。

3.6.0中的已知问题

  • 服务器-31760

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

  • 工具-1827

    当将URI与SRV一起使用时,如果命令行URI中没有指定查询参数,则获取的TXT记录将被忽略。要绕过这一点,请在URI查询字符串中显式指定用于与数据库通信的TLS/SSL设置(ssl=true或ssl=false)。

  • WT-3724

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

  • 构建内存结构的操作因果一致;然而,只有一些操作在与因果一致会话相关联时返回错误。请参阅因果一致性限制。

另见:

所有JIRA问题都在3.6中得到解决

报告问题

要报告问题,请参阅https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports关于如何为MongoDB服务器或相关项目之一提交JIRA票据的指导。

译者:韩鹏帅 参见

原文 - Release Notes for MongoDB 3.6

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""