Mongodb学习笔记--使用java连接操作mongodb

添加依赖:

<dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
            <version>3.11.2</version>
            <scope>compile</scope>
        </dependency>
package com.xiazhi.mongodb.util;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.WriteConcern;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;


/**
 * @author ZhaoShuai
 * @date Create in 2020/5/6
 **/
public enum MongoUtil {

    /**
     * 此类的一个实例
     */
    instance;

    private static MongoClient mongoClient;

    static {
        System.out.println("***********MongodbUtil初始化***************");
        String host = "192.168.226.130";
        int port = 27017;
        mongoClient = new MongoClient(host, port);
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        builder.cursorFinalizerEnabled(true);
        builder.connectionsPerHost(300);
        builder.connectTimeout(30000);
        builder.maxWaitTime(5000);
        builder.socketTimeout(0);
        builder.threadsAllowedToBlockForConnectionMultiplier(5000);
        builder.build();
    }

    /**
     * 获取数据库
     * @param dbName
     * @return
     */
    public MongoDatabase getDatabase(String dbName) {
        Assert.hasText(dbName, "dbName con not be null");
        return mongoClient.getDatabase(dbName);
    }

    /**
     * 获取collections
     * @param database 数据库名
     * @param collection 表名
     * @return 表数据信息
     */
    public MongoCollection<Document> getCollection(String database,String collection) {
        MongoDatabase mongoDatabase = getDatabase(database);

        Assert.hasText(collection, "collection name can not be null");
        return mongoDatabase.getCollection(collection);
    }

    /**
     * 获取所有collection的名字
     * @param database 数据库名
     * @return 表名
     */
    public List<String> getCollectionsName(String database) {
        MongoDatabase mongoDatabase = getDatabase(database);
        MongoIterable<String> collectionNames = mongoDatabase.listCollectionNames();

        List<String> list = new ArrayList<>();
        for (String next : collectionNames) {
            list.add(next);
        }

        return list;
    }

    /**
     * 获取所有数据库名
     * @return 所有数据库名
     */
    public List<String> getDatabaseNames() {
        MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();

        List<String> list = new ArrayList<>();
        for (String databaseName : databaseNames) {
            list.add(databaseName);
        }

        return list;
    }

    /**
     * 插入一条数据
     * @param db
     * @param coll
     * @param document
     */
    public void insert(String db, String coll, Document document) {
        MongoCollection<Document> collection = getCollection(db, coll);
        Assert.notNull(document, "插入数据不能为空");
        collection.insertOne(document);
    }

    /**
     * 根据主键查找
     * @param db
     * @param coll
     * @param id
     * @return
     */
    public Document findById(String db, String coll, String id) {
        MongoCollection<Document> collection = getCollection(db, coll);
        return findById(collection, id);
    }

    /**
     * 根据主键查找
     * @param collection
     * @param id
     * @return
     */
    public Document findById(MongoCollection<Document> collection, String id) {
        Assert.notNull(id, "id can not be null");
        ObjectId objectId = new ObjectId(id);
        return collection.find(Filters.eq("_id", objectId)).first();
    }

    /**
     * 条件查询
     * @param coll
     * @param filter
     * @return
     */
    public MongoCursor<Document> findByCondition(MongoCollection<Document> coll, Bson filter) {
        return coll.find(filter).cursor();
    }


}
package com.xiazhi.mongodb;

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.xiazhi.mongodb.util.MongoUtil;
import org.bson.BsonDocument;
import org.bson.BsonString;
import org.bson.BsonValue;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.awt.*;

@SpringBootTest
class MongodbApplicationTests {

    @Test
    void contextLoads() {
        MongoDatabase test = MongoUtil.instance.getDatabase("test");
        System.out.println(test);

        MongoCollection<Document> collections = MongoUtil.instance.getCollection("test", "coll");
        FindIterable<Document> documents = collections.find();
        for (Document document : documents) {
            System.out.println(document);
        }

        Document document = MongoUtil.instance.findById(collections, "5eb230a80a6d7da784ff2c83");
        System.out.println(document);

        Document insert = new Document();
        insert.put("name", "lisi");
        insert.put("age", 18);

        MongoUtil.instance.insert("test", "coll", insert);

        BsonDocument filter = new BsonDocument();
        filter.put("name", new BsonString("lisi"));
        MongoCursor<Document> cursor = MongoUtil.instance.findByCondition(collections, filter);
        while (cursor.hasNext()) {
            Document next = cursor.next();
            System.out.println(next);
        }

    }

}

 

Mongodb学习笔记--使用java连接操作mongodb

上一篇:日常排雷:mysql之不走索引,数量量小越慢?


下一篇:MySQL分库分表原理