MongoDB详解--使用Java对MongoDB中存在的数据进行更新不存在的数据进行插入的操作
2019-03-07 15:39
736 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/stalin_/article/details/88309796
今天有个需求,就是把收到的数据实时进行更新到mongodb(之前一直都是插入操作),而Mongodb中也存在如同MySQL里面unique关键字+ON DUPLICATE KEY UPDATE来判断某个数据是否存在,如果存在则更新不存在则插入的操作。那么如何使用Java进行这种更新操作呢。下面直接上代码。
连接mongo集群工具类:
[code]public class MongoUtils { public static MongoClient mongoClient = null; private static String USERNAME;// 用户名 private static String PASSWORD;// 密码 private static String DBNAME;// mongo库名 private static int connectsNum = 30;// 每台服务器连接的最大连接数 private static int threadsAllowedToBlockForConnectionMultiplier = 10;// 线程队列数 private static List<ServerAddress> serverList = new ArrayList<>();// 服务器列表 public static MongoClient initMongo() { try { serverList.add(new ServerAddress("192.168.0.1", 27017));// 注,ip和端口以实际为准,这里只是测试 serverList.add(new ServerAddress("192.168.0.2", 27017));// 注,ip和端口以实际为准,这里只是测试 serverList.add(new ServerAddress("192.168.0.3", 27017));// 注,ip和端口以实际为准,这里只是测试 // 连接池设置 注意readPreference参数 MongoClientOptions options = MongoClientOptions.builder().connectTimeout(6000).socketTimeout(0) .connectionsPerHost(connectsNum).maxConnectionIdleTime(6000) .threadsAllowedToBlockForConnectionMultiplier(threadsAllowedToBlockForConnectionMultiplier) .readPreference(ReadPreference.secondaryPreferred()).build(); // 认证 MongoCredential credential = MongoCredential.createCredential(USERNAME, DBNAME, PASSWORD.toCharArray()); mongoClient = new MongoClient(serverList, Arrays.asList(credential), options); } catch (Exception e) { e.printStackTrace(); } return mongoClient; } }
主函数及方法:
[code]public class Main2 { public static void main(String[] args) { // 初始化mongo集群连接池,大家可以去我上一篇文章中去找相关代码 MongoUtils.initMongo(); // 对不存在的数据进行插入,对存在的数据进行更新 findAndUpdateOrInsert(); } public static void findAndUpdateOrInsert() { try { MongoClient mongoClient = MongoUtils.mongoClient; MongoDatabase database = mongoClient.getDatabase("testDB"); MongoCollection<Document> collection = database.getCollection("testCollection"); // 这里使用另一种拼接文档的方式 BasicDBObject searchDoc = new BasicDBObject().append("id", 1); // 注意这里文档进行了嵌套,外层代表进行重置,里层是要重置的条件 BasicDBObject newDoc = new BasicDBObject("$set", new BasicDBObject().append("name", "刘亦菲").append("sex", "women").append("date", new Date())); // ** 如果根据条件查询到数据就进行更新操作,如果未查到就进行插入操作。** collection.findOneAndUpdate(searchDoc, newDoc, new FindOneAndUpdateOptions().upsert(true)); } catch (Exception e) { e.printStackTrace(); } } }
在MongoDB的更新操作中已经设计好了一种选项,就是upsert。所以我们在填写findOneAndUpdate方法时参数的时候加一个new FindOneAndUpdateOptions().upsert(true)即可。
喜欢的朋友点个赞哦~~
相关文章推荐
- 使用java连接mysql数据库进行数据的查询插入更新及删除
- MySQL数据表中记录不存在则插入,存在则更新/不操作
- C#使用SqlBulkCopy将DataTable写入数据库的表中(表不存在则创建新表,数据存在则更新,不存在则插入)
- java操作数据库 存在就更新不存在就插入的优化操作
- mysql如何实现插入数据时如果不存在则插入如果存在则更新的操作
- mongodb 当数据存在时更新数据,数据不存在时插入数据
- Java操作MongoDB插入数据进行模糊查询与in查询功能
- mysql学习总结一当数据不存在的时候插入,存在的时候进行更新,删除重复数据
- JAVA处理数据不存在插入存在更新
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- java中使用JXL对Excel文件进行数据的写入、导出操作
- Java使用jdbc连接Sqlite数据库,进行各种数据操作
- python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- php7中使用mongoDB的聚合操作对数据进行分组求和统计操作
- MYSQL 数据表中行存在时更新,不存在时插入的SQL语句
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- sql 批量操作(存在的更新,不存在的插入)
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- Java - 使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?