您的位置:首页 > 数据库 > Mongodb

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)即可。

 

 

喜欢的朋友点个赞哦~~

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐