Java操作MongoDB——更新
写在前面:
之前的一个问题解决
关于Springboot项目用@Value()注解无法获取配置文件中的值的解决
1.在static修饰的方法中无法取值
2.在构造函数中无法取值
本人理解:这是关于项目启动及加载顺序的问题,配置文件的加载在static修饰之后,在构造函数之后
在进行更新操作之前要确认API源码中提供的更新方法,对各方法进行分析比较之后选出最适合本次操作的更新方法。
关于分析本人拙见:
1.分析参数,与本次操作将要用到的参数进行比较,是否匹配,不匹配的话转换是否方便
2.分析返回值,API方法返回值与本次操作预期的返回值是否匹配,不匹配的话转换是否方便
更新操作代码:
package net.pushi.neo4jdata.dataParser.service.impl;
import com.mongodb.ConnectionString;
import com.mongodb.client.*;
import com.mongodb.client.result.UpdateResult;
import net.pushi.neo4jdata.dataParser.service.MongoDBService;
import net.pushi.neo4jdata.util.MongoDBUtil;
import org.bson.Document;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class MongoDBServiceImpl implements MongoDBService{
@Value("${spring.data.mongodb.uri}")
private String uri;
@Value("${spring.data.mongodb.db}")
private String db;
public MongoDatabase createConnect(){
MongoClient mongoClient = MongoClients.create(new ConnectionString(uri));
MongoDatabase database = mongoClient.getDatabase(db);
return database;
}
public MongoCollection<Document> getDBCollection(String collectionName) {
Map<String, MongoCollection<Document>> dbCollectionMap = new ConcurrentHashMap<String, MongoCollection<Document>>();
MongoCollection<Document> collection = null;
if (dbCollectionMap.containsKey(collectionName)) {
collection = dbCollectionMap.get(collectionName);
} else {
collection = createConnect().getCollection(collectionName);
if (null != collection) {
dbCollectionMap.put(collectionName, collection);
}
}
return collection;
}
@Override
public Map updateManyByCollectionName(Map<String, Object> map) {
//筛选条件
Map<String,Object> filter = new HashMap<>();
if (map.get("filter")instanceof Map){
filter = (Map<String, Object>)map.get("filter");
}
//需改内容
Map<String,Object> set = new HashMap<>();
if (map.get("set")instanceof Map){
set = (Map<String, Object>) map.get("set");
}
Document document = new Document("$set", new Document(MongoDBUtil.setParameter(set)));
//执行修改
UpdateResult updateResult = getDBCollection(map.get("collectionName").toString()).updateMany(MongoDBUtil.setParameter(filter), document);
return new HashMap<String, Object>(){{put("code","200");put("message","匹配数"+updateResult.getMatchedCount()+";修改数"+updateResult.getModifiedCount());}};
}
持续更新中。。。