注意
下一页讨论该$merge
阶段,该阶段将聚合管道结果输出到集合。有关$mergeObjects
将文档合并为单个文档的运算符的讨论,请参见$mergeObjects
。
$merge
具有以下语法:
例如:
如果使用所有默认选项$merge
(包括写入同一数据库中的集合),则可以使用简化形式:
该$merge
文件包含以下字段:
领域 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
进入 | 输出集合。请指定:
|
||||||||||
上 | 可选的。充当文档唯一标识符的一个或多个字段。标识符确定结果文档是否 与输出集中的现有文档匹配。请指定:
对于指定的一个或多个字段:
on的默认值取决于输出集合: |
||||||||||
何时匹配 | 可选的。对于 您可以指定:
|
||||||||||
让 | 可选的。指定可在whenMatched管道中使用的变量 用变量名和值表达式指定一个文档:
如果未指定,则默认为;。即
whenMatched管道可以访问变量。 注意 从MongoDB 4.2.2开始,该 要访问whenMatched管道中的 |
||||||||||
whenNotMatched | 可选的。 您可以指定预定义的操作字符串之一:
|
_id
现场生成¶该$merge
阶段可输出到分片集合。对输出集合进行分片后,$merge
将使用该_id
字段和所有分片键字段作为默认的标识符。如果覆盖默认值,则on标识符必须包含所有分片键字段:
例如,在具有的数据库中,使用该方法创建一个新的分片集合,并将
字段作为分片键。sharding enabled
sh.shardCollection()
newrestaurants
postcode
该newrestaurants
集合将包含按月(新开幕的餐厅信息文件date
场)和邮政编码(片键); 具体来说,开
标识符是(字段的顺序无关紧要)。因为需要唯一的索引,且索引的键对应于on标识符字段,所以创建唯一索引(字段的顺序无关紧要):[1]["date", "postcode"]
$merge
restaurants
创建分片集合和唯一索引后,您可以用于$merge
将聚合结果输出到该集合,
并在以下示例中进行匹配:[ "date", "postcode" ]
[1] | 在以下情况下,该 在上面的示例中,由于 |
$merge
)vs替换集合($out
)¶_id
键值¶whenMatched
管道行为¶从MongoDB 4.2.2开始,如果以下所有条件对于一个$merge
阶段均成立
:
insert
和$merge
将文档直接插入到输出集合中。
在MongoDB 4.2.2之前,当$merge
满足阶段的这些条件时
,将使用空的输入文档执行whenMatched字段中指定的管道
。来自管道的结果文档将插入到输出集合中。
也可以看看
$out
$merge
和$out
比较
随着的引入$merge
,MongoDB提供了$merge
和的两个阶段,$out
用于将聚合管道的结果写入集合。以下总结了这两个阶段的功能:
$merge |
$out |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|