MongoDB 入门实战(4)--mongo-java-driver 操作 MongoDB

本文主要介绍使用 MongoDB Java 客户端 mongo-java-driver 来操作 MongoDB,使用到的软件版本:MongoDB 5.0.5、mongo-java-driver 3.12.10。

1、引入依赖

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.12.10</version>
</dependency>

2、连接 MongoDB

package com.abc.demo.general.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoIterable;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MongodbConnectCase {
    private static Logger logger = LoggerFactory.getLogger(MongodbConnectCase.class);

    /**
     * 连接单个地址
     */
    @Test
    public void connectSingle() {
        MongoClient mongoClient = null;
        try {
            mongoClient = new MongoClient( "10.49.196.10" , 27017);
            MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();
            Iterator<String> iterator = databaseNames.iterator();
            while (iterator.hasNext()) {
                logger.info(iterator.next());
            }
        } finally {
            if (mongoClient != null) {
                mongoClient.close();
            }
        }
    }

    /**
     * 连接多个地址,可用于副本集集群、分片集群的连接
     */
    @Test
    public void connectReplicaSet() {
        MongoClient mongoClient = null;
        try {
            List<ServerAddress> list = new ArrayList<>();
            list.add(new ServerAddress("10.49.196.10", 27017));
            list.add(new ServerAddress("10.49.196.11", 27017));
            list.add(new ServerAddress("10.49.196.12", 27017));
            mongoClient = new MongoClient(list);

            MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();
            Iterator<String> iterator = databaseNames.iterator();
            while (iterator.hasNext()) {
                logger.info(iterator.next());
            }
        } finally {
            if (mongoClient != null) {
                mongoClient.close();
            }
        }
    }

    /**
     * 用户名密码验证
     */
    @Test
    public void connectAuth() {
        MongoClient mongoClient = null;
        try {
            ServerAddress serverAddress = new ServerAddress("10.49.196.10", 27017);
            //指定用户名、用户所在数据库(不是角色对应的数据库)、密码
            MongoCredential credential = MongoCredential.createCredential("test2", "config", "123456".toCharArray());

            mongoClient = new MongoClient(serverAddress, credential, MongoClientOptions.builder().build());
            MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();
            Iterator<String> iterator = databaseNames.iterator();
            while (iterator.hasNext()) {
                logger.info(iterator.next());
            }
        } finally {
            if (mongoClient != null) {
                mongoClient.close();
            }
        }
    }

}

3、操作 MongoDB

package com.abc.demo.general.mongodb;

import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
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 org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

public class MongodbOperateCase {
    private static Logger logger = LoggerFactory.getLogger(MongodbOperateCase.class);

    private MongoClient mongoClient;

    @Before
    public void before() {
        mongoClient = new MongoClient( "10.49.196.10" , 27017);
    }

    @After
    public void after() {
        if (mongoClient != null) {
            mongoClient.close();
        }
    }

    /**
     * 获取数据库,没有会创建
     */
    @Test
    public void getDatabase() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        logger.info(mongoDatabase.getName());
    }

    /**
     * 删除数据库
     */
    @Test
    public void dropDatabase() {
        mongoClient.dropDatabase("testdb");
    }

    /**
     * 创建集合
     */
    @Test
    public void createCollection() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        mongoDatabase.createCollection("col1");
    }

    /**
     * 获取集合
     */
    @Test
    public void getCollection() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = mongoDatabase.getCollection("col1");
        logger.info(collection.countDocuments() + "");
    }

    /**
     * 删除集合
     */
    @Test
    public void dropCollection() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = mongoDatabase.getCollection("col1");
        collection.drop();
    }

    /**
     * 插入文档
     */
    @Test
    public void insertDocumnet() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = mongoDatabase.getCollection("col1");

        List<Document> documents = new ArrayList<Document>();
        Document document1 = new Document("name", "jack").append("age", 20);
        Document document2 = new Document("luci", "luci").append("age", 21);
        documents.add(document1);
        documents.add(document2);
        collection.insertMany(documents);
    }

    /**
     * 查询文档
     */
    @Test
    public void findDocumnet() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = mongoDatabase.getCollection("col1");

        //查询所有
        FindIterable<Document> iterable = collection.find();
        MongoCursor<Document> cursor = iterable.iterator();
        while (cursor.hasNext()) {
            logger.info("1:" + cursor.next().toJson());
        }

        //order by name limit 2,3 (对应mysql语法,从第二条记录[即跳过第一条]开始,查询三条记录)
        iterable = collection.find().sort(new BasicDBObject("name", 1)).skip(1).limit(3);
        cursor = iterable.iterator();
        while (cursor.hasNext()) {
            logger.info("2:" + cursor.next().toJson());
        }

        //where name='jack'
        BasicDBObject query = new BasicDBObject();
        query.put("name", "jack");
        iterable = collection.find(query);
        cursor = iterable.iterator();
        while (cursor.hasNext()) {
            logger.info("3:" + cursor.next().toJson());
        }

        //where age in(20,21)
        query = new BasicDBObject();
        List<Integer> list = new ArrayList<>();
        list.add(20);
        list.add(21);
        query.put("age", new BasicDBObject("$in", list));
        iterable = collection.find(query);
        cursor = iterable.iterator();
        while (cursor.hasNext()) {
            logger.info("4:" + cursor.next().toJson());
        }

        //where age>10 and age<30
        query = new BasicDBObject();
        query.put("age", new BasicDBObject("$gt", 10).append("$lt", 30));
        iterable = collection.find(query);
        cursor = iterable.iterator();
        while (cursor.hasNext()) {
            logger.info("5:" + cursor.next().toJson());
        }

        //where age!=10
        query = new BasicDBObject();
        query.put("age", new BasicDBObject("$ne", 10));
        iterable = collection.find(query);
        cursor = iterable.iterator();
        while (cursor.hasNext()) {
            logger.info("6:" + cursor.next().toJson());
        }

        //where name='jack' and age=20
        List<BasicDBObject> queryList = new ArrayList<>();
        queryList.add(new BasicDBObject("name", "jack"));
        queryList.add(new BasicDBObject("age", 20));
        query = new BasicDBObject();
        query.put("$and", queryList);
        iterable = collection.find(query);
        cursor = iterable.iterator();
        while (cursor.hasNext()) {
            logger.info("7:" + cursor.next().toJson());
        }
    }

    /**
     * 更新文档
     */
    @Test
    public void updateDocumnet() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = mongoDatabase.getCollection("col1");

        collection.updateMany(Filters.eq("name", "jack"), new Document("$set",new Document("age", 22)));
    }


    /**
     * 删除文档
     */
    @Test
    public void deleteDocumnet() {
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
        MongoCollection<Document> collection = mongoDatabase.getCollection("col1");

        collection.deleteOne(Filters.eq("name", "jack"));
    }
}

 

posted @ 2022-03-12 11:05  且行且码  阅读(2172)  评论(0编辑  收藏  举报