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'
] } })
相关推荐
清水白石0081 小时前
从一个“支付状态不一致“的bug,看大型分布式系统的“隐藏杀机“
java·数据库·bug
Python私教5 小时前
model中能定义字段声明不存储到数据库吗
数据库·oracle
BestandW1shEs8 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师8 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球8 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...8 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00018 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502778 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游
难以触及的高度9 小时前
mysql中between and怎么用
数据库·mysql