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'
] } })
相关推荐
保持学习ing1 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
宇钶宇夕2 小时前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
爱可生开源社区2 小时前
SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
数据库
贾修行3 小时前
SQL Server 空间函数从入门到精通:原理、实战与多数据库性能对比
数据库·sqlserver
傲祥Ax3 小时前
Redis总结
数据库·redis·redis重点总结
一屉大大大花卷4 小时前
初识Neo4j之入门介绍(一)
数据库·neo4j
周胡杰4 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0014 小时前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师4 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头4 小时前
Oracle注释详解
数据库·oracle