今天遇到这样一个场景:在Java中批量更新MongoDB数据,不过每次更新的条件有不一样,那如何有效地进行更新操作呢?

刚开始的时候,我是想到循环批量更新操作,即每一种查询条件进行一次批量更新过程,这样的思路就是多个查询条件就需要进行多次的批量更新,带来的弊端是跟数据库的连接交互太频繁了,消耗的时间都浪费在这些过程中了;那么今天我们可以通过另外一种方式来避免这种负面影响,只需要和数据库建立一次连接即可完成批量条件批量更新。

  (一)整体思路

  1、首先,将需要更新的数据存在一个List集合中

  2、然后,通过MongoTemplate的bulkOps方法返回的对象进行批量查询条件进行批量更新数据

  (二)逻辑代码

MongoTemplate mongoTemplate = new MongoTemplate ();
String collectionName = "testCollection";
List<Object> updateEntityList = new ArrayList<>();
List<Pair<Query, Update>> updateList = new ArrayList<>();
BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName);
updateEntityList .forEach(data -> {
Query query = new Query(); // 需要根据具体的业务场景来添加查询条件
Update update = new Update(); // 需要根据具体的业务场景通过newEntityList最新数据更新oldEntityList的某些数据
update.set(key1, value1);
update.set(key2, value2);
update.set(key3, value3);
Pair<Query, Update> updatePair = Pair.of(query, update);
updateList.add(updatePair);
});
operations.updateMulti(updateList);
BulkWriteResult result = operations.execute();

  (三)小结

  这里主要用到了MongoDB的bulkOps方法,可以适用于不同的条件下批量操作。

------20200113勉

MongoDB的批量查询条件进行批量更新数据的更多相关文章

  1. Oracle批量查询、删除、更新使用BULK COLLECT提高效率

    BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer用法笔记 例1: 批量查询项目资金账户号为 &q ...

  2. Elasticsearch学习笔记(十)批量查询mget、批量增删改bulk

    一.批量查询  mget             GET /_mget {   "docs":[       {         "_index":" ...

  3. Elasticsearch由浅入深(六)批量操作:mget批量查询、bulk批量增删改、路由原理、增删改内部原理、document查询内部原理、bulk api的奇特json格式

    mget批量查询 批量查询的好处就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的 ...

  4. 7 批量查询mget、批量修改bulk

    注意:当执行多条数据查询.增删改时,一定要用mget.bulk,提升性能,减少网络传输   mget   回顾:查询单个文档 GET /beauties/my/2   mget 查询多个文档: 不同 ...

  5. MongoDB中关于查询条件中包括集合中字段的查询

    要查询的数据结构例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FvMzY5NTE=/font/5a6L5L2T/fontsize/400/f ...

  6. [SQL]批量 更改字符集脚本,批量查询约束,批量查询索引

    How to change collation of all database objects in SQL Server. Have you encountered a problem where ...

  7. stackExchange.redis 实现模糊匹配批量查询

    如果使用redis的频次较高,那么业务中经常会出现需要根据关键字进行批量查询,所以总结一下StackExchange中使用批量查询的方法(如果数据量很大,那么在redis中模糊查询很耗时,请慎用!) ...

  8. mongodb多表查询(附带pymongo实例)

    mongodb有$lookup可以做多表查询 举个例子 数据如下 db.orders.insert([ { , , }, { , , }, { } ]) db.inventory.insert([ { ...

  9. mongodb的简单查询

    此篇文章简单的记录一下mongodb 的简单查询操作. 一.数据准备: db.persons.insertMany([ {'userId':1,name:'张三','age':20,'scores': ...

随机推荐

  1. Java 添加、读取、删除Excel文档属性

    在文档属性中,可以设置诸多关于文档的信息,如创建时间.作者.单位.类别.关键词.备注等摘要信息以及一些自定义的文档属性.下面将通过Java程序来演示如何设置,同时对文档内的已有信息,也可以实现读取和删 ...

  2. DOM - Document Object Model

    Document Object Model

  3. Python Namespace - 命名空间

    命名空间 命名空间 namespace 对 python 来说是一个非常核心的概念,整个 python 虚拟机运行的机制与 namespace 概念有这非常紧密的联系. 从'赋值'说起, python ...

  4. mysql 支持emoji表情

    在mysql插入emoji表情,出现错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A' for column ' ...

  5. pytorch之 RNN 参数解释

    上次通过pytorch实现了RNN模型,简易的完成了使用RNN完成mnist的手写数字识别,但是里面的参数有点不了解,所以对问题进行总结归纳来解决. 总述:第一次看到这个函数时,脑袋有点懵,总结了下总 ...

  6. 常用命令 find chmod

    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find  [指定查找目录]  [查找规则]  [查找 ...

  7. 打包 压缩 命令tar zip

    tar语法 #压缩tar -czvf ***.tar.gztar -cjvf ***.tar.bz2#解压缩tar -xzvf ***.tar.gztar -xjvf ***.tar.bz2 tar ...

  8. chkcongfig 命令

    chkconfig   命令主要用来  更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig ...

  9. javascript中onclick(this)用法介绍

    this指触发事件的对象 代码如下: <input id="myinput" type="text" value="javascript中onc ...

  10. VueJs一步步实现带感的帮助面板

    环境 IDE: WebStorm 2019.1.4 系统: Mac OS X 10.15.4 VueJs: 2.6.11 Vue-cli: 4.2.2 前言   最近一直在忙毕设,前端终于还是对我这个 ...