$out(输出集合)
最后更新:2026-10-09
$out(输出集合)
$out 把管道结果写入指定集合,替换该集合原有全部内容,目标不存在则自动创建。它必须是管道最后一个阶段,且不能与 $merge 混用。写入过程持有集合级锁,全量替换成本较高,常用于离线报表、缓存表。$out 不能跨库,但 MongoDB 4.4 起可写入其他数据库。
| 分类 | 高级与诊断 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $out: "<集合名>" }
⚙️ 参数
| 目标集合 | 写入的集合名。 |
|---|
返回值:不向后续阶段输出(结果写入目标集合)
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $out:把 2024 年订单导出到新集合
db.orders.aggregate([
{ $match: { year: 2024 } },
{ $out: 'orders_2024' }
])
运行结果:
// orders_2024 集合被整体替换
📌 注意事项
- 必须是管道最后一个阶段
- 目标集合内容被整体替换(不是追加)
- 写入过程持有集合级锁,数据量大时阻塞同集合操作
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$out 会覆盖已有集合吗?
A会,整个集合内容被替换;写失败时保持原集合。
Q$out 和 $merge 怎么选?
A要全量替换用 $out;要增量更新、按键合并用 $merge。
Q$out 能写到其他数据库吗?
AMongoDB 4.4 起支持,写成 '其他库名.集合名' 的形式。