MongoDB 4.4 最新特性介绍

MongoDB 4.4就要发布了,本文就来介绍一些这个版本的一些最新的功能。

MongoDB 4.4中改进的功能

对冲读取

MongoDB可以并行处理读请求,然后从最有效的节点来获取结果,从而可以减少应用的延时。

可定义的共享秘钥

在scale过程中修改数据分布的时候会在共享秘钥中加入后缀。

镜像读取

这个功能可以对副本的cache预先warm,从而可以减少计划的维护或者outage的时候主选举消耗。

聚合增强

聚合增强有了很多方面的改进,包括定义和汇总聚合表达式,从不同的mongo collection中组合数据到一个结果中,字符串处理以及数组处理的新操作。下面是一些加强:

$out

$out现在可以把输出collection的结果到不同的数据库,而早期的版本只能输出到同一个数据库中。

$indexStats

$indexStats在新的版本中有了一些新的域,包括下面这些:

Building这是一个Boolean的flag,用来表示正在建立的索引
Spec每一个索引的规格文档
Shard分片的名字

$merge

$merge可以在要升级的同一个collection中输出。另外,可以在一个collection中数据并显示在pipeline上,比如$lookup。

$planCacheStates的改变

$planCacheStates现在可以同时在mongod和mongos instance上运行。另外,$planCacheStats在运行的时候有一个新的域我们称之为host域。PlanCache.list()是$planCacheStats聚合阶段的包装。

$collStats改变

$collStats在扩充文档中已经可以接收查询统计信息。另外Collection扫描有下面这些域:

域名字描述
nonTailble一个64位整数,用来表示多个查询上的一个collection 扫描,它不使用tailable光标。
Total总计是执行查询的集合,它不适用tailable进行集合扫描

$unionWith聚合

MongoDB已经增加了一个$unionWith,这个功能统一了collection集,也就是说,它把从多个collection中得到的pipeline结果集合到一个中。

$unionWith语法

$unionWith有下面这些通用的语法:

cd{ $unionWith: { coll: "<collection>", pipeline: [ <stage1>, ... ] } }

$unionWith有一个简单的语法版本,可以用来包含一个collection中的所有文档:

{ $unionWith: "<collection>" }  // include all documents from the specified collection

$accumulator聚合

$accumulator是MongoDB 4.4中的一个新的支持累加操作的功能。累加在文档管道进行时不该变状态的运算符。你可以使用$accumulator操作来执行MongoDB中不支持的JavaScript函数。$accumulator可以在下面管道的三个stage中发现:

  1. $bucket stage:只有输出文档包含不止一个文档输入。
  2. $group stage: specified_id输入文档并且为每一个特定grouping输出文档
  3. $bucketAuto stage:它把文档entries按照特定group number排序,也称之为buckets。

$accumulator的语法如下所示:

{ $accumulator:{
	init: <code>,
	initArgs: <array expression>,    // Optional
	accumulate: <code>,
	accumulateArgs: <array expression>,
	merge: <code>,
	finalize: <code>, // Optional
	lang: <string>
  }}

$function聚合

$function聚合定义了JavaScript函数的聚合。

$function操作可以用来定义MongoDB不支持的函数行为

$function的语法如下:

{
  $function: { 
	body: <code>, 
	args: <array expression>,
	lang: "js"
  }
}

别的MongoDB 4.4中支持的功能包括:writes concerns, 全局读,stream复制,可恢复的初始同步以及复合hash分片等。

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *