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'
] } })
相关推荐
誰能久伴不乏1 小时前
从零开始:用Qt开发一个功能强大的文本编辑器——WPS项目全解析
数据库·qt·wps
40岁的系统架构师2 小时前
17 一个高并发的系统架构如何设计
数据库·分布式·系统架构
安的列斯凯奇3 小时前
Redis篇 Redis如何清理过期的key以及对应的解决方法
数据库·redis·缓存
小小虫码3 小时前
MySQL和Redis的区别
数据库·redis·mysql
飞翔的佩奇5 小时前
Java项目: 基于SpringBoot+mybatis+maven+mysql实现的图书管理系统(含源码+数据库+答辩PPT+毕业论文)
java·数据库·spring boot·mysql·spring·毕业设计·图书管理
一 乐6 小时前
基于vue船运物流管理系统设计与实现(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端·船运系统
jerry6097 小时前
注解(Annotation)
java·数据库·sql
vcshcn8 小时前
DBASE DBF数据库文件解析
数据库·dbase
AIGC大时代10 小时前
对比DeepSeek、ChatGPT和Kimi的学术写作撰写引言能力
数据库·论文阅读·人工智能·chatgpt·数据分析·prompt
如风暖阳10 小时前
Redis背景介绍
数据库·redis·缓存