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" ] }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

骑砍战团MOD开发(29)-module_scenes.py游戏场景

骑砍1战团mod开发-场景制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Cw411N7G4/ 一.骑砍游戏场景 骑砍战团中进入城堡,乡村,战斗地图都被定义为场景,由module_scenes.py进行管理。 scene(游戏场景) 天空盒(Skyboxes.py) 地形(terrain code) 场景物(scene_…

【华为数据之道学习笔记】8-2 数据质量规则

异常数据是不满足数据标准、不符合业务实质的客观存在的数据&#xff0c;如某位员工的国籍信息错误、某位客户的客户名称信息错误等。 数据在底层数据库多数是以二维表格的形式存储&#xff0c;每个数据格存储一个数据值。若想从众多数据中识别出异常数据&#xff0c;就需要通过…

[EFI]机械革命Mechrevo-蛟龙5-76Q电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Mechrevo-Jiaolong-76Q 处理器AMD Ryzen 7 5800h已驱动内存2 x 8GB DDR4 2133MHz已驱动硬盘LITEON CV5-8Q256 256GB已驱动显卡核显已驱动声卡Realtek ALC293 (ALC3235)已驱动网卡Intel I219-LM Gigabit Ethernet已驱动无线网卡蓝牙Intel Wireless-AX200 D…

【滑动窗口】C++算法:可见点的最大数目

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 LeetCode 1610可见点的最大数目 给你一个点数组 points 和一个表示角度的整数 angle &#xff0c;你的位置是 location &#xff0c;其中 location [posx, posy] 且 point…

React MUI(版本v5.15.2)详细使用

使用React MUI&#xff08;版本v5.15.2&#xff09;的详细示例。请注意&#xff0c;由于版本可能会有所不同&#xff0c;因此建议您查阅官方文档以获取最新的信息和示例。但是&#xff0c;我将根据我的知识库为您提供一些基本示例。 首先&#xff0c;确保您已经按照之前的说明…

CentOs7安装 Kafka

在 CentOS 7 上安装 Kafka 可以按照以下步骤进行。这里假设您已经在 CentOS 7 系统上安装了 Java。如果没有安装 Java&#xff0c;请先安装 Java。 步骤 1: 安装 Java sudo yum install java-1.8.0-openjdk步骤 2: 下载和解压 Kafka 访问 Apache Kafka 官方网站&#xff1a;…

C#语言发展历程(1-7)

一、类型发展 C#1中是没有泛型的 在C#2中在逐渐推出泛型。C#2还引入了可空类型。 示例&#xff1a;C#泛型&#xff08;详解&#xff09;-CSDN博客 1 C#3&#xff1a;引入了匿名类型、和隐式的局部变量&#xff08;var&#xff09; 匿名类型&#xff1a;我们主要是使用在LIN…

openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅

文章目录 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅179.1 发布179.2 订阅179.3 冲突处理179.4 限制179.5 架构179.6 监控179.7 安全性179.8 配置设置179.9 快速设置 openGauss学习笔记-179 openGauss 数据库运维-逻辑复制-发布订阅 发布和订阅基于逻辑复…

大模型推理部署:LLM 七种推理服务框架总结

自从ChatGPT发布以来&#xff0c;国内外的开源大模型如雨后春笋般成长&#xff0c;但是对于很多企业和个人从头训练预训练模型不太现实&#xff0c;即使微调开源大模型也捉襟见肘&#xff0c;那么直接部署这些开源大模型服务于企业业务将会有很大的前景。 本文将介绍七中主流的…

用文心一言写“批量进行文本文件的字符集转换”的脚本

尝试用文心一言写了个 shell 脚本&#xff0c;一字未改&#xff0c;直接运行&#xff0c;运行结果正确。的确可以提高工作效率。 输入的问题如下&#xff1a; 请按照以下要求编写一个shell脚本。 1. 编写一个函数&#xff0c;函数名是cnvfile。其输入是一个文件名。首先用cha…

C++的面向对象学习(8):面向对象编程的三大特性之:多态

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、多态是什么&#xff1f;多态是面向对象编程中的一个重要概念&#xff0c;指的是同一个函数在不同的对象上具有不同的行为。具体来说&#xff0c;多态是通过虚函…

微服务(6)

目录 26.LoadBalanced注解的作用&#xff1f; 27.什么是断路器&#xff1f; 28.什么是Hystrix? 29.什么是Feign? 30.SpringCloud有几种调用接口方式&#xff1f; 26.LoadBalanced注解的作用&#xff1f; 开启客户端负载均衡 27.什么是断路器&#xff1f; 当一个服务调用…

【eclipse】eclipse开发springboot项目使用入门

下载eclipse Eclipse downloads - Select a mirror | The Eclipse Foundation 安装eclipse 其他一步一步即可 我们是开发java web选择如下 界面修改 Window->Preferences-> 修改eclipse风格主题 Window->Preferences->General->Appearance 修改字体和大小…

【用pandas,写入内容到excel工作表的问题】

用pandas的话&#xff08;如下面代码所示&#xff09;&#xff0c;写入内容到excel工作表&#xff0c;有几个问题&#xff1a; 1、运行的之前&#xff0c;excel需要先关闭。 2、如果Sheet2存在&#xff0c;那么就会报错。如果if_sheet_exists‘replace’&#xff0c;那么就会把…

基于 CefSharp 实现一个文件小工具

I’m not saying you can’t be financially successful I’m saying have a greater purpose in life well beyond the pursuit of financial success Your soul is screaming for you to answer your true calling You can change today if you redefine what success is to …

Python和Java的优缺点

Python的优点&#xff1a; 简单易学&#xff1a;Python的语法简洁清晰&#xff0c;易于学习和理解。丰富的库和框架&#xff1a;Python拥有庞大的标准库和活跃的开源社区&#xff0c;可以快速使用各种功能强大的库和框架&#xff0c;比如NumPy、Pandas、Django等。可读性强&am…

深度强化学习DQN训练避障

目录 一.前言 二.代码 2.1完整代码 2.2运行环境 2.3动作空间 2.4奖励函数 2.5状态输入 2.6实验结果 一.前言 深度Q网络&#xff08;DQN&#xff09;是深度强化学习领域的一项革命性技术&#xff0c;它成功地将深度学习的强大感知能力与强化学习的决策能力相结合。在过…

VIM8 文本实战学习

目录 第一章 开始Vim 之旅 1.1 模式界面与无模式界面对比 1.2 通过.vimrc文件来配置Vim 1.3 Vim 交换文件 1.4 通过:help阅读Vim手册 本章小结 第二章 高级编辑和文本浏览 主要内容&#xff1a; 2.1 安装插件 2.2 组织工作区 2.2.1 缓冲区 2.2.2 插件——unimpaire…

Kafka集群详解

Kafka介绍Kafka集群介绍Kafka集群特点Kafka集群搭建在这里插入图片描述Kafka集群如何进行故障切换Kafka集群Leader的选举Kafka集群如何快速横向拓展Kafka集群搭建最佳实践Kafka集群可以使用单节点Zookeeper吗Kafka集群的消费者信息保存在那里Kafka集群的Topic的分区数的设置规则…

YOLOv8改进 添加可变形注意力机制DAttention

一、Deformable Attention Transformer论文 论文地址&#xff1a;arxiv.org/pdf/2201.00520.pdf 二、Deformable Attention Transformer注意力结构 Deformable Attention Transformer包含可变形注意力机制&#xff0c;允许模型根据输入的内容动态调整注意力权重。在传统的Tra…