Java操作MongoDB——查询(1)

Java操作MongoDB——查询

Java语言标准的数据库是MySQL,但是有些时候也会用到MongoDB

由于是第一次处理MongoDB,所以将代码以及思路记录下了,方便以后回顾总结

我连接的MongoDB的数据是远程数据库,开发测试用的本地库,连接本地数据库的方法网上有很多

碰见一个问题:用@Value()注解无法获取配置文件中的值,所以MongoDB地址和库直接写的,后续找到原因并解决后会贴出来。——已解决

MongoDB工具类:

package net.pushi.neo4jdata.util;

import com.mongodb.BasicDBObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @ClassName MongoDBUtil
 * @Desc TODO   MongoDB 工具类
 * @Date 2020/3/10 9:43
 * @Version 1.0
 */
@Component
public class MongoDBUtil {

    @Autowired
    private static MongoTemplate mongoTemplate;

    //参数处理
    public static BasicDBObject setParameter(Map<String, Object> map){
        BasicDBObject query = new BasicDBObject();
        query.putAll(map);
        return query;
    }

    /*
     * @ClassName MongoDBUtil
     * @Desc TODO   创建集合,并返回是否创建成功  -2:已存在 / -1:创建失败 / 1:创建成功
     * @Date 2020/3/10 10:59
     * @Version 1.0
     */
    public static Integer createCollection(String collectionName){
        // 先判断集合是否存在
        if(mongoTemplate.collectionExists(collectionName)){
            return -2;
        }else{
            // 创建一个集合
            mongoTemplate.createCollection(collectionName);
            // 判断集合是否存在
            if(mongoTemplate.collectionExists(collectionName)){
                return 1;
            }else{
                return -1;
            }
        }
    }

    /*
     * @ClassName MongoDBUtil
     * @Desc TODO   在指定集合中添加数据
     * @Date 2020/3/10 11:12
     * @Version 1.0
     */
    public static void add(Collection<?> batchToSave , String collectionName){
        mongoTemplate.insert(batchToSave,collectionName);
    }

    /*
     * @ClassName MongoDBUtil
     * @Desc TODO   根据条件和指定集合删除数据
     * @Date 2020/3/10 14:20
     * @Version 1.0
     */
    public static void delete(Query query , Object obj , String collectionName){
        mongoTemplate.remove(query, obj.getClass(), collectionName);
    }

    /*
     * @ClassName MongoDBUtil
     * @Desc TODO   根据条件更新数据
     * @Date 2020/3/10 14:30
     * @Version 1.0
     */
    public static void update(Query query , Update update , Object obj , String collectionName){
        mongoTemplate.updateMulti(query , update , obj.getClass() , collectionName);
    }

    /*
     * @ClassName MongoDBUtil
     * @Desc TODO   获取指定集合下的全部数据
     * @Date 2020/3/10 11:18
     * @Version 1.0
     */
    public static List<?> getAllByCollectionName(Object obj , String collectionName){
        return mongoTemplate.findAll(obj.getClass(),collectionName);
    }

    /*
     * @ClassName MongoDBUtil
     * @Desc TODO   根据条件和集合名称查询数据
     * @Date 2020/3/10 11:31
     * @Version 1.0
     */
    public static List<?> getByConditionAndCollectionName(Query query , Object obj , String collectionName){
        return mongoTemplate.find(query, obj.getClass() , collectionName);
    }

}

根据自己的需要对数据进行处理
数据查询处理代码:

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 List findAllByCollectionName(Map<String, Object> map) {
        Map<String,Object> filter = new HashMap<>();
        if (map.get("filter")instanceof Map){
            filter = (Map<String, Object>)map.get("filter");
        }
        MongoCursor<Document> cursor = getDBCollection(map.get("collectionName").toString()).find(MongoDBUtil.setParameter(filter)).skip(0).iterator();
        List<Map<String,Object>> mapList = new ArrayList<>();
        while (cursor.hasNext()){
            Document document = cursor.next();
            mapList.add(document);
        }
        System.out.println("mapList=========》"+mapList);
        cursor.close();
        return mapList;
    }
}

记录一下Springboot—MongoDB驱动包中的一些方法:

FindIterable limit(int var1):查询结果分页,每页条数var1

FindIterable skip(int var1):忽略查询结果的前var1条

FindIterable sort(@Nullable Bson var1):查询结果排序(升序或降序)

关键的类:1、MongoClient 类;2、MongoDatabase接口以及它的实现类

参考文章地址:
https://www.cnblogs.com/jayinnn/p/9593512.html
https://blog.csdn.net/qq_19167629/article/details/82108680

后续还会持续更新:新增、删除、更新数据的过程和代码。

猜你喜欢

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