本文介绍 MongoDB 6.0 版本的主要新特性。
MongoDB 的聚合功能(Aggregation)支持通过聚合管道(Aggregation Pipeline)对数据进行过滤、分组、排序、计算统计信息等操作,帮助分析和处理多个文档数据。
针对聚合功能,MongoDB 6.0 版本进行了如下更新:
新增支持包括 $densify、$documents、$fill 和 $shardedDataDistribution 在内的更多聚合阶段。
新增支持更多聚合操作符,例如 $bottomN/$topN、$firstN/$lastN、$linearFill、$locf、$maxN/$minN、$sortArray,$tsIncrement,$tsSecond等。您可以组合使用这些聚合操作符来形成复杂的聚合管道,以满足不同的数据分析需求。
聚合阶段优化了对分片集合的支持。MongoDB 6.0 新增支持在 $lookup 和 $graphLookup 聚合阶段的 from
字段中使用分片集合。
自 MongoDB 3.6 版本开始支持的 Change Stream 功能,可用于监控 MongoDB 集合、数据库或部署的修改操作,当被监控的资源发生变更时,变更流会返回一个包含有关操作及其所做更改信息的更改事件通知文档。
针对变更流功能,MongoDB 6.0 版本进行了如下更新:
新增支持查看文档变更前和变更后的版本(即 Pre-image 和 Post-image)。MongoDB 6.0 之前的版本仅支持查看变更后的版本。更多详情,请参见 Change Streams with Document Pre- and Post-Images。
变更流事件(change stream events)新增对 create、createIndexes、dropIndexes、modify 和 shardCollection等 DDL 语句的支持。
变更流事件(change stream events)新增 wallTime
字段用于确定数据库操作的服务器日期和时间。
MongoDB 在 5.0 版本之后,对索引相关功能进行了如下优化:
自 MongoDB 5.1 版本开始,支持在 collMod 命令中通过添加 expireAfterSeconds
字段将 一个普通的单字段索引转成 TTL 索引。
MongoDB 5.3 版本新增支持在创建集合时使用聚簇索引(Clustered index)。使用了聚簇索引的集合(即 Clustered Collections)具备以下优势:
聚簇集合在增删改查场景下存在额外的性能改进。原因如下:
MongoDB 在创建集合时会在 _id
字段上自动创建唯一索引,防止客户端插入 _id
相同重复数据。非聚簇集合需要将数据和 _id
索引分开存放,这意味着修改类或读取类操作,均需要写入或读取两次数据。
聚簇集合会按 _id
顺序将数据和 _id
索引存放在一起,因此修改类或读取类操作,都仅需写入或读取一次数据,实现在不依赖二级索引(secondary index)的情况下进行更快的查询(如在聚簇索引键上进行范围和等值查询)。
聚簇集合使用的存储空间更小,有助于提高查询和批量插入的性能。
聚簇索引可以作为 TTL 索引(需要格式符合受支持的日期类型),能够提升 TTL 删除效率并减少数据存储空间
MongoDB 6.0 版本新增支持在 collMod 命令中使用 prepareUnique
和 unique
选项,用于将现有的标准索引转换为唯一索引。索引转换具体示例,请参见 Convert an Existing Index to a Unique Index。
MongoDB 6.0 版本在分片集群方面进行了如下优化:
MongoDB 在 5.0 版本之后,对时序集合相关功能进行了如下优化:
MongoDB 5.1 版本新增支持对时序集合进行分片,为时序集合提供了横向增加容量和读写性能的能力。更多详情,请参见 Shard a Time Series Collection。
自 MongoDB 5.2 版本,时序集合开始使用列压缩,帮助减少数据在磁盘上的总体存储,并提高读取性能。
MongoDB 6.0 新增支持对 array 类型数据的压缩。更多详情,请参见 Time Series Compression。