JAVA连接MongoDB工具类

JAVA连接MongoDB工具类

1、MongoDB驱动

		<!--mongoDb驱动-->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.2.2</version>
        </dependency>

3、工具类

import com.mongodb.*;
import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author: 
 * @version: v1.0
 * @description:
 * @date: 2022-02-23
 **/
public class MongoDbUtils {


    /**
     * @param
     * @return {@link MongoDatabase}
     * @description: 获取mongoDb连接(不需要用户验证)
     **/
    public static MongoClient getMongoDbClient(String url, int port) {

        MongoClient mongoClient = null;

        try {
            //连接到 mongodb 服务
            mongoClient = new MongoClient(url, port);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //返回连接数据库对象
        return mongoClient;
    }

    /**
     * @param
     * @return {@link MongoDatabase}
     * @description: 获取mongoDb连接(不需要用户验证)
     **/
    public static MongoDatabase getMongoDbConnection(String url, int port, String database) {

        MongoDatabase mongoDb = null;

        try {
            //连接到 mongodb 服务
            MongoClient mongoClient = new MongoClient(url, port);
            //连接到数据库
            mongoDb = mongoClient.getDatabase(database);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //返回连接数据库对象
        return mongoDb;
    }

    /**
     * @param
     * @return {@link MongoDatabase}
     * @description: 获取mongoDb连接需要用户验证)
     **/
    public static MongoClient getMongoDbAuthClient(String user, String password, String url, int port, String database) {

        List<ServerAddress> adds = new ArrayList<>();
        List<MongoCredential> credentials = new ArrayList<>();
        MongoClient mongoClient = null;
        try {
            //服务器地址  端口
            ServerAddress serverAddress = new ServerAddress(url, port);
            adds.add(serverAddress);
            //用户名 数据库名称 密码
            MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(user, database, password.toCharArray());
            credentials.add(mongoCredential);
            //通过连接认证获取MongoDB连接
            //MongoClient mongoClient = new MongoClient(serverAddress, credentials);
            mongoClient = new MongoClient(adds, credentials);

        } catch (Exception e) {
            e.printStackTrace();
        }

        //返回连接数据库对象
        return mongoClient;
    }

    /**
     * 创建集合
     *
     * @param mongoClient
     * @param dataBase
     * @param collName
     */
    public static void createCollection(MongoClient mongoClient, String dataBase, String collName) {
        MongoDatabase mongoDatabase = mongoClient.getDatabase(dataBase);
        mongoDatabase.createCollection(collName);
    }

    /**
     * 获取集合
     *
     * @param mongoClient
     * @param dataBase
     * @param collName
     */
    public static MongoCollection<Document> getMongoCollection(MongoClient mongoClient, String dataBase, String collName) {
        MongoDatabase mongoDatabase = mongoClient.getDatabase(dataBase);
        MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
        return collection;
    }

    /**
     * @param mongoClient mongoDb客户端
     * @param collName    数据库名
     * @return {@link List< String>}
     * @description: 查询DB下的所有表名
     **/
    public static List<String> getAllCollections(MongoClient mongoClient, String collName) {

        MongoDatabase mongoDatabase = mongoClient.getDatabase(collName);

        MongoIterable<String> collections = mongoDatabase.listCollectionNames();
        List<String> list = new ArrayList<String>();
        for (String s : collections) {
            list.add(s);
        }
        return list;

    }

    /**
     * @param mongoClient mongoDb客户端
     * @return {@link MongoIterable< String>}
     * @description: 获取所有数据库名称列表
     **/
    public static MongoIterable<String> getAllDBNames(MongoClient mongoClient) {
        return mongoClient.listDatabaseNames();
    }


    /**
     * @param mongoClient mongoDb客户端
     * @param database    数据库名
     * @description: 删除一个数据库
     **/
    public static void dropDB(MongoClient mongoClient, String database) {
        mongoClient.getDatabase(database).drop();
    }


    /**
     * 创建索引
     *
     * @param mongoClient
     * @param dataBase
     * @param collName
     */
    public static String createIndex(MongoClient mongoClient, String dataBase, String collName, String field) {
        MongoDatabase mongoDatabase = mongoClient.getDatabase(dataBase);
        MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
        return collection.createIndex(new BasicDBObject(field, 1));
    }


    /**
     * 插入数据到mongo
     *
     * @param database
     * @param document
     * @param collName
     */
    public static void insertOne(MongoDatabase database, String collName, Document document) {
        MongoCollection<Document> collection = database.getCollection(collName);
        collection.insertOne(document);
    }

    /**
     * 插入数据到mongo
     *
     * @param database
     * @param collName
     * @param documentList
     */
    public static void insertBatch(MongoDatabase database, String collName, List<Document> documentList) {
        MongoCollection<Document> collection = database.getCollection(collName);
        collection.insertMany(documentList);
    }

    /**
     * 获取某列的max的值
     * sql: select max(create_time) from t_user
     *
     * @param mongoClient
     * @param mongoDbDb
     * @param mongoDbTable
     * @param checkColumn
     * @return
     */
    public static String queryMaxColumn(MongoClient mongoClient, String mongoDbDb, String mongoDbTable, String checkColumn, String checkColumnFormat) {

        String result = null;
        MongoDatabase mongoDatabase = mongoClient.getDatabase(mongoDbDb);
        MongoCollection<Document> poolCollection = mongoDatabase.getCollection(mongoDbTable);
        //查询mongoDb的DateTime字段必须设置UTC
        SimpleDateFormat sdf = new SimpleDateFormat(checkColumnFormat);
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        //1升序排序 -1降序排序
        FindIterable<Document> documents = poolCollection.find().sort(new Document().append(checkColumn, -1)).limit(1);

        for (Document document : documents) {
            result = sdf.format(document.getDate(checkColumn));
        }

        return result;
    }


    /**
     * 根据时间范围查询数据
     * sql: select id,name,age,gender from t_user where create_time>'2023-02-24 00:00:00' and create_time<='2023-02-24 12:00:00'
     *
     * @param mongoClient
     * @param database
     * @param tableName
     * @param queryColumn
     * @param checkColumn
     * @param checkColumnFormat
     * @param startOffset
     * @param endOffset
     * @return
     */
    public static List<String> queryDataResultJson(MongoClient mongoClient, String database, String tableName, String queryColumn, String checkColumn, String checkColumnFormat, String startOffset, String endOffset) {

        List<String> list = new ArrayList<>();
        try {

            MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
            MongoCollection<Document> poolCollection = mongoDatabase.getCollection(tableName);

            //查询mongoDb的DateTime字段必须设置UTC
            SimpleDateFormat sdf = new SimpleDateFormat(checkColumnFormat);
            sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
            //1 查询的条件
            Bson queryWhere = Filters.and(Filters.gt(checkColumn, sdf.parse(startOffset)), Filters.lte(checkColumn, sdf.parse(endOffset)));

            //2 查询的条件
//            BasicDBObject queryWhere = new BasicDBObject();
//            queryWhere.put(checkColumn, new BasicDBObject("$gt", sdf.parse(startOffset)));
//            queryWhere.put(checkColumn, new BasicDBObject("$lte", sdf.parse(endOffset)));
            //3 查询的条件
//            query.put(checkColumn, new BasicDBObject("$gt", sdf.parse(startOffset)).append("$lte", sdf.parse(endOffset)));

            //显示字段
            BasicDBObject queryFields = new BasicDBObject();
            String[] fields = queryColumn.split(",", -1);
            for (String field : fields) {
                queryFields.put(field, true);
            }

            //指定查询过滤器查询
            FindIterable<Document> documents = poolCollection.find(queryWhere).projection(queryFields);
            for (Document document : documents) {
                list.add(document.toJson());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     *
     * @param mongoClient
     * @param database
     * @param collName
     * @return
     */
    public static FindIterable<Document> findAll(MongoClient mongoClient,String database,String collName) {
        MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
        MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
        FindIterable<Document> documents = collection.find();
        return documents;
    }


    /**
     * 查找对象 - 根据主键_id
     * @param mongoClient
     * @param database
     * @param collName
     * @param id
     * @return
     */
    public static Document findById(MongoClient mongoClient,String database,String collName, String id) {

        ObjectId idObj = null;
        try {
            MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
            MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
            idObj = new ObjectId(id);
            Document myDoc = collection.find(Filters.eq("_id", idObj)).first();
            return myDoc;
        } catch (Exception e) {
            return null;
        }

    }


    /**
     * 获取数据量
     * @param mongoClient
     * @param database
     * @param collName
     * @return
     */
    public static long getCount(MongoClient mongoClient, String database,String collName) {
        MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
        MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
        return collection.count();
    }


    /**
     * 分页查询
     * @param mongoClient
     * @param database
     * @param collName
     * @param filter
     * @param pageNo
     * @param pageSize
     * @return
     */
    public static MongoCursor<Document> findByPage(MongoClient mongoClient, String database,String collName, Bson filter, int pageNo, int pageSize) {
        MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
        MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
        Bson orderBy = new BasicDBObject("_id", 1);
        return collection.find(filter).sort(orderBy).skip((pageNo - 1) * pageSize).limit(pageSize).iterator();
    }

    /**
     * 根据id删除文档
     * @param mongoClient
     * @param database
     * @param collName
     * @param id
     * @return
     */
    public static int deleteById(MongoClient mongoClient, String database,String collName, String id) {
        int count = 0;
        ObjectId Oid = null;
        try {
            MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
            MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
            Oid = new ObjectId(id);
            Bson filter = Filters.eq("_id", Oid);
            DeleteResult deleteResult = collection.deleteOne(filter);
            count = (int) deleteResult.getDeletedCount();

        } catch (Exception e) {
            return 0;
        }
        return count;
    }


    /**
     * 根据id更新文档
     * @param mongoClient
     * @param database
     * @param collName
     * @param id
     * @param newDoc
     * @return
     */
    public static Document updateById(MongoClient mongoClient, String database,String collName, String id, Document newDoc) {

        ObjectId idObj = null;
        try {
            MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
            MongoCollection<Document> collection = mongoDatabase.getCollection(collName);
            idObj = new ObjectId(id);
            Bson filter = Filters.eq("_id", idObj);
            collection.updateOne(filter, new Document("$set", newDoc));
        } catch (Exception e) {
            return null;
        }

        return newDoc;
    }


    /**
     * @param mongoClient mongoDb客户端
     * @return
     * @description: 关闭mongoDb客户端
     **/
    public static void close(MongoClient mongoClient) {
        if (mongoClient != null) {
            mongoClient.close();
        }
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值