相关文章推荐
长情的弓箭  ·  一个有趣的问题, ...·  1 年前    · 
听话的核桃  ·  mysql 多列模糊查询 ...·  2 年前    · 
憨厚的薯片  ·  使用 okhttp 的 PUT ...·  2 年前    · 
讲道义的机器猫  ·  Visual Studio ...·  2 年前    · 

merge的介绍

merge是mongodb  4.2版中的新功能。merge可以将聚合的结果输出到一个新的集合或者与已存在的集合做合并。

mongodb4.4的版本允许输出到原有的集合。

版本查看可以通过  db.version();

merge的语法

{ $merge: {
     into: <collection> -or- { db: <db>, coll: <collection> }, // 目标集合,不存在时会新增一个集合。如果是一个分片集合,则该集合必须已存在。
     on: <identifier field> -or- [ <identifier field1>, ...],  // 可选的:默认是_id;如果现有输出集合是分片集合,则on的默认标识符为分片键字段和_id字段。如果指定其他标识符,则必须包含所有分片键。
     let: <variables>,                                         // 可选的
     whenMatched: <replace|keepExisting|merge|fail|pipeline>,  // 可选的,匹配时操作
“replace”:替换现有集合字段
“keepExisting”:保留现有数据,不进行任何操作
“merge”:默认值,合并两个集合.即:不存在的字段插入到目标集合,已经存在字段替换掉原有集合字段。
     whenNotMatched: <insert|discard|fail>                     // 可选的
“insert” 默认值,插入
“discard”:丢弃
“fail”:报错,结束合并

首先准备数据:

原有集合数据A

{ _id: 1, a: 1, b: 1 }

集合数据B

{ _id: 1, b: 5, z: 1 }

{ _id: 2, b: 1, z: 1 }

操作步骤:

db.B.aggregate([

  { $project: { _id: 0 } },

  { $merge : { into : "A" } }

合并后A集合效果

{ _id: 1, a: 1, b: 5, z: 1 }

{ _id: 2, b: 1, z: 1 }

merge的介绍 merge是mongodb 4.2版中的新功能。merge可以将聚合的结果输出到一个新的集合或者与已存在的集合做合并。 mongodb4.4的版本允许输出到原有的集合。 版本查看可以通过 db.version();merge的语法{ $merge: { into: &lt;collection&gt; -or- { db: &lt;db&gt;, coll: &lt;collection&gt; }, // 目标集合,不存在时会新增... 麻省理工学院许可证 (MIT) 特此授予任何人免费获得本软件和相关文档文件(“软件”)副本的许可,不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售软件的副本,并允许向其提供软件的人员这样做,但须符合以下条件: 上述版权声明和本许可声明应包含在软件的所有副本或重要部分中。 本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担责
聚合框架是 MongoDB 中的一组分析工具,可以对一个或多个集合中的文档进行分析。聚合框架基于管道的概念。使用聚合管道可以从 MongoDB 集合获取输入,并将该集合中的文档传递到一个或多个阶段,每个阶段对其输入执行不同的操作。每个阶段都将之前阶段输出的内容作为输入。所有阶段的输入和输出都是文档——可以称为文档流。
1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce。 单一作用聚合:提供了对常见聚合过程的简单访问,操作都从单个集合聚合文档。 聚合管道是一个数据聚合的框架,模型基于数据处理流水线的概念。文档进入多级管道,将 文档转换为聚合结果。 MapReduce操作具有两个阶段:处理每个文档并向每个输入文档发射一个或多个对象的map阶段,以及reduce组合map操作的输出阶段。
MongoDB合并两个集合 mongodb中遇到两张表需要合并,开始是用Navicat导出数据再导入数据,发现文档的类型都变了,所有都变成了字符串类型,于是找到一个函数 db."集合".find().forEach(function(item) { db."集合1".insert(item); db."集合".remove(item); // 合并集合 db.saas_order.find().forEach(function(item) { db.saas_orders.insert(it
最近在做项目的时候碰到一个对mongoDB的数据处理,从MongoDB中拿到内嵌文档的时间排序的list。 一开始考虑到直接对mongoDB中的属性排序,后面发现属性存在内嵌文档中,所以处理中需要用到聚合函数。 (key)解决这个问题的过程让我学到很多,发现自己在解决一个问题不仅查找问题的姿势不对,浪费太多时间。而且在碰到问题之后,应该多看看解决办法,甚至解决了之后要去思考问题,回顾问题。而不是像以前一样,解决问题了就万事大吉,抛之脑后。 需要对document中的一个tweet_list 集合中的一个属性 timestamp_ms进行排序。 组内排序
    为了便于做复杂的聚合查询,mongo提供了aggregate指令,基于管道运算进行对数据的处理,常见的$sort,$project,$group,$match就不在赘述了,下面整理一些不常见的但是有时候很有用的指令: $unwind 我们插入mongo数据的时候,肯定会遇到插入数组或者列表的场景,但是对于列表数据的读取怎么操作呢,比如我想把多条文档中的列表数据重新整合去重该怎么操作,这是就需要用到unwind,它可以将某一个列表打散拆成多条文档: {"id":1,list:[1,2,3,4]} db.myCollection.update( { _id: 123 }, // 查询条件 { $set: { name: "John", age: 30 } } // 修改内容 这个例子中,我们查询了 _id 字段为 123 的文档,并使用 $set 操作符将它的 name 字段修改为 "John",age 字段修改为 30。 还有很多其他的修改选项,例如可以使用 $inc 操作符来增加字段的值,使用 $unset 操作符来删除字段等。有关更多信息,可以参考 MongoDB 文档。 CSDN-Ada助手: 非常感谢博主的辛勤付出,写出如此精彩的技术博客。这篇博客对于IDEA插件开发的踩坑记录非常有启发性,尤其是对Action介绍与在工具栏、弹出菜单中运用的讲解非常详细。希望博主能够继续分享更多的知识和经验,让我们这些初学者受益匪浅。再次感谢博主的无私奉献! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 IDEA-插件开发踩坑记录-第一坑-创建gradle工程编译失败 我做了配置,用0.4.21的plungin+1.8jdk+2019.1.1的运行起来了,但是用1.1.2+11.02jdk+2021.2.4+gradle7确有问题,希望得到楼主解救,也可加我Q 727379048 lombok未正常生效问题排查-maven编译问题排查 donguojun: 问题解决:特来感谢; 使用java构建一个挡板程序-5-使用webFilter实现挡板服务URL配置化 改仓库地址了: https://gitee.com/crazyAsm/MockT 使用java构建一个挡板程序-5-使用webFilter实现挡板服务URL配置化 明2022: 代码地址失效了?