当前位置: 首页 > news >正文

MongoDB聚合:$out

$out阶段将聚合管道产生的文档写入到指定的集合,从MongoDB4.4开始,支持指定数据库。$out阶段必须放在聚合管道的最后,支持聚合结果任意大小的数据集。

警告:

如果指定的集合已经存在则会被替换。

语法

用法 1: 定数据库和集合名称

{ $out: { db: "<output-db>", coll: "<output-collection>" } }
  • db 指定数据库的名称:

    • 对于标准的副本集,如果指定的数据库不存在,$out会自动创建。
    • 对于分片集群,指定的数据库必须已经存在。
  • coll 指定集合的名称

用法 2:只指定集合名称

{ $out: "<output-collection>" } // 同一个数据库

直接为$out指定输出集合的名称,输出到同一数据库。

注意

  • 分片集合可以作为管道的输入,但是不能作为$out的输出集合,想要输出到分片集合可以使用$merge
  • $out操作不能输出到副本集合。
  • 如果要修改带有Atlas Search索引的集合,必须先删除再重建索引,最好使用$merge代替$out

说明

创建新集合

如果指定的的集合不存在$out可以创建新集合。在聚合未结束前集合不可见。如果聚合失败则不会创建集合。

替换已存在的集合

如果指定的集合已经存在,在聚合完成后$out会使用新的结果替换原有集合,具体步骤如下:

  1. 创建一个临时的集合。
  2. 将现有集合索引复制到临时集合。
  3. 将聚合结果文档插入到临时集合。
  4. 调用renameCollection命令,并且dropTarget: True,将临时集合更名为目标集合。

$out操作不会修改原有集合的索引,如果聚合失败,也不会对原有集合做任何修改。

majority 读关注

从MongoDB4.2开始,可以为包含$out阶段的聚合指定"majority"级别的读关注。

mongodump的影响

如果有客户端发起的聚合管道包含$out阶段,则会导致带有--oplog参数的’mongodump’执行失败。

一些限制

  • 事务的限制。事务中的聚合管道不能使用$out
  • 时间序列集合的限制。聚合管道不能使用$out把结果输出到时间序列集合。
  • 视图的限制。在视图定义中,不允许包含$out阶段。如果视图定义中包含内置的管道(如:视图定义包含$lookupfacet阶段),$out阶段不能用于这些内置管道。
  • $lookup阶段的限制。从MongoDB4.2开始,不能将$out应用与$lookup阶段的内嵌管道。
  • $facet阶段的限制。在$facet阶段的内置管道不允许使用$out阶段。
  • $unionWith阶段的限制。在$unionWidth阶段的内置管道不允许使用$out阶段。
  • "linearizable" 读关注的限制。从MongoDB4.2开始,$out阶段不能与读关注"linearizable"一起使用。这意味着,如果在db.collection.aggregate()指定了读关注"linearizable",则不能在管道中使用$out阶段。

举例

test数据库创建一个books集合并插入文档:

db.getSiblingDB("test").books.insertMany([{ "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 },{ "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 },{ "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 },{ "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 },{ "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }
])

输出到同一个库

以下聚合操作将test数据库中books集合中的数据调整为按author分组的标题,然后将结果写入test数据库的authors集合。

db.getSiblingDB("test").books.aggregate( [{ $group : { _id : "$author", books: { $push: "$title" } } },{ $out : "authors" }
] )
  • $group阶段按照作者分组,使用$push将同一作者的图书标题数组放入books字段:

    { "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }
    { "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
    
  • $out阶段将文档输出到test数据库的authors集合

运行查询命令:

db.getSiblingDB("test").authors.find()

得到结果:

{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }

输出到不同的数据库

以下聚合操作将test数据库中books集合中的数据调整为按author分组的标题,然后将结果写入reporting数据库的authors集合。

db.getSiblingDB("test").books.aggregate( [{ $group : { _id : "$author", books: { $push: "$title" } } },{ $out : { db: "reporting", coll: "authors" } }
] )
  • $group阶段按照作者分组,使用$push将同一作者的图书标题数组放入books字段:

    { "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }
    { "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
    
  • $out阶段将文档输出到reporting数据库的authors集合

运行查询命令:

db.getSiblingDB("reporting").authors.find()

得到结果:

{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }

相关文章:

MongoDB聚合:$out

$out阶段将聚合管道产生的文档写入到指定的集合&#xff0c;从MongoDB4.4开始&#xff0c;支持指定数据库。$out阶段必须放在聚合管道的最后&#xff0c;支持聚合结果任意大小的数据集。 警告&#xff1a; 如果指定的集合已经存在则会被替换。 语法 用法 1&#xff1a; 定数…...

一次奇葩的spin_lock_irq / spin_unlock_irq使用不当导致的系统卡死分析

这是在调试内核block层时遇到的一例奇葩的soft lock锁死问题(内核版本centos 8.3&#xff0c;4.18.0-240)&#xff0c;现场如下&#xff1a; [ 760.247152] watchdog: BUG: soft lockup - CPU#0 stuck for 23s! [kworker/0:1:2635]……………..[ 760.247184] CPU: 0 PID: 26…...

公司创建百度百科需要哪些内容?

一个公司或是一个品牌想要让自己更有身份&#xff0c;更有知名度&#xff0c;更有含金量&#xff0c;百度百科词条是必不可少的。通过百度百科展示公司的详细信息&#xff0c;有助于增强用户对公司的信任感&#xff0c;提高企业形象。通过百度百科展示公司的发展历程、领导团队…...

qt中信号槽第五个参数

文章目录 connent函数第五个参数的作用自动连接(Qt::AutoConnection)直接连接(Qt::DirectConnection - 同步)同线程不同线程 队列连接(Qt::QueuedConnection - 异步)同一线程不同线程 锁定队列连接(Qt::BlockingQueuedConnection) connent函数第五个参数的作用 connect(const …...

模式识别与机器学习-SVM(线性支持向量机)

线性支持向量机 线性支持向量机间隔距离学习的对偶算法算法:线性可分支持向量机学习算法线性可分支持向量机例子 谨以此博客作为复习期间的记录 线性支持向量机 在以上四条线中&#xff0c;都可以作为分割平面&#xff0c;误差率也都为0。但是那个分割平面效果更好呢&#xff1…...

【并行计算】GPU,CUDA

一、CUDA层次结构 1.kernel核函数 一个CUDA程序是一个kernel核函数被GPU的多个计算单元并行执行的过程&#xff0c;CUDA给了如下抽象 dim3 threadsPerBlock(4, 3, 1); dim3 numBlocks(3, 2, 1); matrixAdd<<<numBlocks, threadsPerBlock>>>(A, B, C); 2.G…...

计算机网络教案——计算机网络设备章节

第五章 计算机网络设备 一、教学目标: 1. 了解计算机网络的主要设备 2. 了解计算机网络设备的主要原理 3. 掌握计算机网络设备的基本用途 4. 掌握计算机网络设备的使用常识 二、教学重点、难点 计算机网络设备的主要原理 三、技能培训重点、难点 计算机网络设备的使用…...

什么是SLAM中的回环检测,如果没有回环检测会怎样

目录 什么是回环检测 如果没有回环检测 SLAM&#xff08;Simultaneous Localization and Mapping&#xff0c;即同时定位与地图构建&#xff09;是一种使机器人或自动驾驶汽车能够在未知环境中建立地图的同时定位自身位置的技术。回环检测&#xff08;Loop Closure Detectio…...

ubuntu 通过文件设置静态IP、DNS、网关

1. 确定网络接口名称 首先&#xff0c;使用 ip a 命令确定您要配置的网络接口名称。 2. 编辑 Netplan 配置文件 使用文本编辑器&#xff08;如 nano&#xff09;打开或创建 Netplan 配置文件&#xff1a; sudo nano /etc/netplan/01-netcfg.yaml3. 输入 Netplan 配置 在编…...

mapboxgl 中热力图的实现以及给热力图点增加鼠标移上 popup 效果

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章还是关于最近做到的 mapboxgl 地图展开的。 借鉴官方示例&#xff1a;https://iclient.supermap.io/examples/mapboxgl/editor.html#heatMapLayer 效果预览 技术思路 将接口数据渲染到地图中形成热力图。还需要将热…...

golang并发安全-sync.map

sync.map解决的问题 golang 原生map是存在并发读写的问题&#xff0c;在并发读写时候会抛出异常 func main() {mT : make(map[int]int)g1 : []int{1, 2, 3, 4, 5, 6}g2 : []int{4, 5, 6, 7, 8, 9}go func() {for i : range g1 {mT[i] i}}()go func() {for i : range g2 {mT[…...

开发第一个SpringBoot程序

使用命令创建Maven工程 mvn archetype:generate -DgroupIdorg.sang -DartifactIdchapter01 -DarchetypeArtifactIdmaven-archetype-quickstart -DinteractiveModefalse 参数说明&#xff1a; -DgroupId 组织Id&#xff08;项目包名&#xff09; -DartifactId 项目名称或模块…...

2023年度总结—你是你的年度MVP吗?

这段年度总结其实我之前就想写了&#xff0c;大概就是市赛比完之后18号的样子把&#xff0c;但是因为太懒了就一直拖到了现在哈哈&#xff0c;我思来想去&#xff0c;翻来覆去&#xff0c;彻夜难眠&#xff0c;想了想&#xff0c;还是决定把它写了吧&#xff01;毕竟&#xff0…...

Linux基础知识学习3

vim编辑器 其分为四种模式 1.普通(命令)模式 2.编辑模式 3.底栏模式 4.可视化模式 vim编辑器被称为编辑器之神&#xff0c;而Emacs更是神之编辑器 普通模式&#xff1a; 1.光标移动 ^ 移动到行首 w 跳到下一个单词的开头…...

Leetcode5-在长度2N的数组中找出重复N次的元素(961)

1、题目 给你一个整数数组 nums &#xff0c;该数组具有以下属性&#xff1a; nums.length 2 * n. nums 包含 n 1 个 不同的 元素 nums 中恰有一个元素重复 n 次 找出并返回重复了 n 次的那个元素。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,3] 输出&#xff1a…...

openssl的 openssl.cnf配置文件详解

背景&#xff1a;在上一篇文中&#xff0c;提到要写一篇openssl 配置文件详解的&#xff0c;这就来了~~~ find / -name openssl.cnf /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf&#xff0c;该文件主要设置了证书请求、签名、crl相关的配置。主要相关的伪命令为ca和req…...

SpringBoot集成支付宝,看这一篇就够了。

前 言 在开始集成支付宝支付之前&#xff0c;我们需要准备一个支付宝商家账户&#xff0c;如果是个人开发者&#xff0c;可以通过注册公司或者让有公司资质的单位进行授权&#xff0c;后续在集成相关API的时候需要提供这些信息。 下面我以电脑网页端在线支付为例&#xff0c;介…...

数据结构程序设计——哈希表的应用(2)->哈希表解决冲突的方法

目录 实验须知 代码实现 实验报告 一&#xff1a;问题分析 二、数据结构 1.逻辑结构 2.物理结构 三、算法 &#xff08;一&#xff09;主要算法描述 1.用除留余数法构造哈希函数 2.线性探测再散列法 &#xff08;一&#xff09;主要算法实现代码 四、上机调试 实…...

微信小程序开发系列-07组件

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…...

JavaScript 中 Set 和 Map 的区别

JavaScript 中的 Set 和 Map 都是用来存储数据的数据结构&#xff0c;它们之间的区别如下&#xff1a; Set 是一组唯一值的集合&#xff0c;而 Map 是一组键值对的集合。Set 中的值是唯一的&#xff0c;不允许重复&#xff1b;Map 中的键是唯一的&#xff0c;值可以重复。Set …...

C#/.NET/.NET Core技术前沿周刊 | 第 70 期(2026年5.01-5.10)

前言C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。欢迎投稿、推荐或…...

如何让老旧安卓电视焕发新生:mytv-android实现流畅播放体验的完整指南

如何让老旧安卓电视焕发新生&#xff1a;mytv-android实现流畅播放体验的完整指南 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 你是否还在为家中那台反应迟钝、启动缓慢的旧电视而烦恼…...

JavaScript中字符串与ArrayBuffer缓冲区的转换

...

AgentDock:构建可控AI智能体的开源框架与工程实践

1. 项目概述&#xff1a;构建可控的智能体应用框架如果你正在寻找一个既能利用大语言模型&#xff08;LLM&#xff09;的创造力&#xff0c;又能确保关键业务流程稳定可靠的开发框架&#xff0c;那么 AgentDock 的出现可能正合你意。我最近深度体验了这个开源项目&#xff0c;它…...

MATLAB仿真实战:手把手绘制LFM信号的模糊函数,看懂“斜刀刃”形状的由来

MATLAB仿真实战&#xff1a;手把手绘制LFM信号的模糊函数&#xff0c;看懂“斜刀刃”形状的由来 雷达信号处理中&#xff0c;模糊函数是理解信号分辨特性的关键工具。对于初学者而言&#xff0c;仅通过数学公式往往难以直观把握其物理意义。本文将通过MATLAB实战&#xff0c;从…...

如何免费解锁Cursor Pro:完整破解方案与实战指南

如何免费解锁Cursor Pro&#xff1a;完整破解方案与实战指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial re…...

免费Windows桌面分区工具NoFences:3分钟打造高效工作空间

免费Windows桌面分区工具NoFences&#xff1a;3分钟打造高效工作空间 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为杂乱无章的Windows桌面而烦恼吗&#xff1f;NoFen…...

保姆级教程:用Sigrity PowerSI提取5GHz内单端S参数(附DDR4仿真实例)

从零掌握Sigrity PowerSI&#xff1a;5GHz单端S参数提取与DDR4实战解析 在高速PCB设计中&#xff0c;信号完整性问题往往成为工程师的"隐形杀手"。当DDR4内存接口速率突破2400MHz时&#xff0c;传统时域分析方法已难以捕捉信号在传输过程中的微妙变化。散射参数&…...

AntiDupl.NET:告别数字杂乱,让图片管理回归优雅

AntiDupl.NET&#xff1a;告别数字杂乱&#xff0c;让图片管理回归优雅 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾经在整理照片时&#xff0c;发现手机里…...

Axure中文汉化终极指南:3分钟搞定英文界面,让原型设计更顺手

Axure中文汉化终极指南&#xff1a;3分钟搞定英文界面&#xff0c;让原型设计更顺手 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...