MongoDB批量更新和批量插入的方式

摘要:
最近,在调试代码中发现向MongoDB插入或者更新文档记录时若是多条的话都是采用for循环操作的,这样的处理方式会造成数据操作耗时,不符合批量处理的原则;对此,个人整理了一下有关MongoDB的批量更新和批量插入的操作流程,如下所示:@AutowiredprivateMongoTemplatemongoTemplate;(1)批量插入示例如下:ListinsertDataList;

最近,在调试代码中发现向MongoDB插入或者更新文档记录时若是多条的话都是采用for循环操作的,这样的处理方式会造成数据操作耗时,不符合批量处理的原则;对此,个人整理了一下有关MongoDB的批量更新和批量插入的操作流程,如下所示:

@Autowired
privateMongoTemplate mongoTemplate;
1)批量插入示例如下:
List<Object>insertDataList;
BulkOperations operations =mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName);operations.insert(insertDataList);
BulkWriteResult result =operations.execute();
2)批量修改示例如下: List<Object>updateDataList; BulkOperations operations =mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName); updateDateList.forEach(date ->{ Query queryUpdate = newQuery(); queryUpdate.addCriteria(where("_id").is(value)); Update update = newUpdate(); update.set(field1, value1).set(field2, value2); operations.updateOne(queryUpdate, update); }); BulkWriteResult result =operations.execute(); 3)利用BulkOperations的upsert方法可以同时支持插入和更新操作,示例如下: List<T> dataList = new ArrayList<>(); List<Pair<Query, Update>> updateList = new ArrayList<>(dataList.size()); BulkOperations operations =mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionName); dataList.forEach(data ->{ Query query = new Query(newCriteria(field1).is(value1)).addCriteria(newCriteria(field2).is(value2)); Update update = newUpdate(); for (int index = 0; index < dataList.size(); index++) { String key =data.getKey(); String value =data.getValue();   update.set(key, value); } Pair<Query, Update> updatePair =Pair.of(query, update); updateList.add(updatePair); }); operations.upsert(updateList); BulkWriteResult result =operations.execute(); 备注:BulkOperations.BulkMode.UNORDERED 和 BulkOperations.BulkMode.ORDERED的区别: UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理; ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。 enumBulkMode { /**Perform bulk operations in sequence. The first error will cancel processing. */ORDERED, /**Perform bulk operations in parallel. Processing will continue on errors. */UNORDERED };

免责声明:文章转载自《MongoDB批量更新和批量插入的方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu下使用git的常用命令笔记C/C++ GCC/Clang生成和链接静态库/动态库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mongodb的配置参数

Mongodb启动命令mongod参数说明mongod的主要参数有: 基本配置-------------------------------------------------------------------------------- --quiet # 安静输出 --port arg # 指定服务端口号,默认端口27017 --bind...

Hibernate的批量处理

  Hibernate完全以面向对象的方式操作数据库,当程序员以面向对象的方式操作持久化对象时,将自动转换为对数据的操作。例如我们Session的delete()方法,来删除持久化对象,Hibernate将负责删除对应的数据记录;当我们执行持久化对象的setter方法时,Hibernate将自动转换为底层的update语句,修改数据库的对应记录。   问题...

django学习-29.表单提交方式之一:post请求(注册/登录/改密)

目录结构 1.写这篇博客的目的 2.完整操作流程 2.1.第一步:新增相关html页面 2.1.1.新增一个【index_html.html】 2.1.2.新增一个【login_html.html】 2.1.3.新增一个【register_html.html】 2.1.4.新增一个【register_success_html.html】 2.1.5.新增一...

pyspark 针对mongodb的读写

1.创建pyspark与mongodb的连接,首先加载依赖包,其有三种方式: 1)直接将其放在在安装spark的jars目录下; 2)在spark_submit中,添加依赖包信息; 3)在创建spark的对象的时候添加依赖信息,具体案例如下图所示 spark = SparkSession .builder .appName('mongo c...

MongoDB中导出数据为csv文件

1. 打开命令行; 2. 输入如下指令(确保数据库是开着的,下面的数据库名称和集合名称以及域的名称可以根据需求修改) mongoexport -d myDB -c user -f _id,name,password,adress --csv -o ./user.csv 3. 说明: mongoexport -d myDB(myDB修改成...

(转)关于Update语句的锁

原文地址:http://www.cnblogs.com/wdfrog/p/3144020.html 环境:MSSQL2005,在Read Committed级别 语句A:begin tranUpdate Table Set f1='xxx' where f2='ttt' --更新一行或多行--commit; //注意为了看到效果这里把commit注释了语...