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: <collection> -or- { db: <db>, coll: <collection> }, // 目标集合,不存在时会新增...
麻省理工学院许可证 (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-插件开发踩坑记录-第一坑-创建gradle工程编译失败
lombok未正常生效问题排查-maven编译问题排查
donguojun:
使用java构建一个挡板程序-5-使用webFilter实现挡板服务URL配置化
使用java构建一个挡板程序-5-使用webFilter实现挡板服务URL配置化
明2022: