$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