$out
¶获取聚合管道返回的文档,并将其写入指定的集合。该$out
操作者必须在最后阶段的管道。该$out
运营商让聚合框架返回结果集的任何尺寸。
在版本3.2.0中进行了更改。
该$out
阶段具有以下原型形式:
$out
采用指定输出集合名称的字符串。
$merge
$merge
和$out
比较
$merge
在4.2版中引入之后,MongoDB提供了两个阶段,$merge
和$out
,用于将聚合管道的结果写入集合。以下总结了这两个阶段的功能:
$out |
$merge |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
如果$out
操作指定的集合已经存在,那么在聚合完成后,该$out
阶段将用新的结果集合原子替换现有的集合。具体来说,该$out
操作:
db.collection.renameCollection
与
到临时集合重命名为目的地集合。dropTarget: true
如果管道产生的文档违反任何唯一索引,包括_id
原始输出集合的字段上的索引,则管道将无法完成
。
4.2版中的新功能。
该$out
阶段不允许作为视图定义的一部分。如果视图定义包括嵌套管道(例如,视图定义包括$lookup
或
$facet
阶段),则此$out
阶段限制也适用于嵌套管道。[1]
[1] | 从4.2开始,您不能将$out 舞台包括在$lookup 舞台的嵌套管道中,无论$lookup 该视图是否
是视图定义的一部分。 |
linearizable
阅读关注点¶从MongoDB 4.2开始,此$out
阶段不能与“关注”一起使用"linearizable"
。也就是说,如果您为指定了"linearizable"
读取关注
db.collection.aggregate()
,则不能将$out
阶段包括
在管道中。
majority
阅读关注点¶从MongoDB 4.2开始,您可以为包含阶段的聚合指定读取关注级别。"majority"
$out
在MongoDB 4.0和更早版本中,您不能包括将读取关注用于聚合的$out
阶段"majority"
。
mongodump
如果客户端发出在转储过程中包括的聚合管道,则“ mongodump
开头为”将
--oplog
失败$out
。请参阅以获取更多信息。mongodump --oplog