Java操作MongoDB——更新(2)

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());}};
    }

持续更新中。。。

猜你喜欢

转载自blog.csdn.net/RookieCode/article/details/104927003