mongodb-批量刷新数据

1、第一种联合删除

db.collection.aggregate([
  {
    $lookup: {
      from: "带刷新数据源表-test1",
      localField: "devCode",
      foreignField: "oldDevCode",
      as: "matching_docs"
    }
  },
  {
    $unwind: "$matching_docs"
  },
  {
    $set: {
      "devCode": "$matching_docs.newDevCode"
    }
  },
  {
    $unset: "matching_docs"
  },
  {
    $merge: {
      into: "被刷新的表-test2",
      on: "_id", // 或者其他唯一标识符字段
      whenMatched: "replace",
      whenNotMatched: "insert"
    }
  }
])

解释:

这是一个MongoDB的聚合查询,主要用于将`test2`集合中的数据与`test1`集合进行联接(lookup),并更新`semp_fault_active`集合中的某些字段。以下是这段聚合查询的详细解释:

  1. **$lookup**:

* **from**: 指定要联接的集合,这里是`test1`。

* **localField**: 指定`test2`集合中的哪个字段用于联接,这里是`devCode`。

* **foreignField**: 指定`a_rep_dev`集合中的哪个字段用于联接,这里是`oldDevCode`。

* **as**: 指定联接后的结果存放在哪个字段中,这里是`matching_docs`。

* 结果:每个`semp_fault_active`文档都会有一个`matching_docs`字段,其中包含了与`devCode`匹配的`a_rep_dev`中的所有文档。

  1. **$unwind**:

* 用于将`matching_docs`数组中的每个文档拆分为单独的文档。这意味着如果`matching_docs`中有n个文档,那么原始文档就会被拆分成n个文档。

  1. **$set**:

* 用于更新`devCode`字段的值。这里,它将`devCode`的值设置为`matching_docs`数组中的`newDevCode`字段的值。

  1. **$unset**:

* 用于删除`matching_docs`字段,因为我们在之后的操作中不再需要它。

  1. **$merge**:

* 这是一个非常有用的操作,它允许你将聚合的结果合并回一个集合。

* **into**: 指定要合并到的集合,这里是`semp_fault_active`。

* **on**: 指定用于匹配的唯一标识符字段,这里是`_id`。这意味着,如果`semp_fault_active`中已经有一个文档具有相同的`_id`,那么该文档将被更新(根据`whenMatched`参数)。

* **whenMatched**: 指定当文档在目标集合中存在时应该如何处理。这里,选择的是"replace",意味着匹配到的文档将被替换为聚合的结果。

* **whenNotMatched**: 指定当文档在目标集合中不存在时应该如何处理。这里,选择的是"insert",意味着非匹配的文档将被插入到目标集合中。

总之,这段聚合查询的主要目的是将`semp_fault_active`集合中的`devCode`字段更新为`a_rep_dev`集合中相应的`newDevCode`字段的值,并将结果合并回`semp_fault_active`集合。如果`_id`字段在`semp_fault_active`集合中已经存在,则替换该文档;如果不存在,则插入新文档。

2、第二种:单表批量删除

bash 复制代码
db.tableName.deleteMany({ "orderCode": { $in: ['DW-1401-20240329-5124678656000',
'DW-1409-20240329-6089991168000',
'DW-1410-20240327-6157379584000',
'DW-1410-20240327-5389821952000',
'DW-1410-20240327-4504823808000'
] } })
相关推荐
一入程序无退路19 分钟前
c语言传参数路径太长,导致无法获取参数
linux·c语言·数据库
陌夏微秋1 小时前
STM32单片机芯片与内部47 STM32 CAN内部架构 介绍
数据库·stm32·单片机·嵌入式硬件·架构·信息与通信
计算机学无涯2 小时前
Spring事务回滚
数据库·sql·spring
web130933203982 小时前
flume对kafka中数据的导入导出、datax对mysql数据库数据的抽取
数据库·kafka·flume
张声录12 小时前
【ETCD】【实操篇(二十)】浅谈etcd集群管理的艺术:从两阶段配置到灾难恢复的设计原则
数据库·etcd
qq_254674412 小时前
数据仓库和数据湖 数据仓库和数据库
数据库·数据仓库
--FGC--2 小时前
【第2篇】 Python与数据库基础
数据库·python·oracle
Y.O.U..3 小时前
Mysq学习-Mysql查询(4)
数据库·学习·mysql
安晴晚风3 小时前
从0开始在linux服务器上部署SpringBoot和Vue
linux·运维·前端·数据库·后端·运维开发
play_big_knife5 小时前
鸿蒙项目云捐助第二十八讲云捐助项目首页组件云数据库加载轮播图
数据库·华为·harmonyos·鸿蒙·云开发·鸿蒙开发·鸿蒙技术