Java 操作 MongoDB

mongo-java-driver操作MongoDB

  1. 引入MongoDB依赖
<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.8.2</version>
</dependency>
  1. 连接工具类
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

/**
 * 1.连接MongoDB数据库
 * 1.3池连方式
 */
public class MongoDBPoolUtil {

    private static MongoClient client = null;

    static {
        if (client == null) {
            MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
            //设置每个连接地址的最大连接数
            builder.connectionsPerHost(10);
            //设置连接的超时时间
            builder.connectTimeout(5000);
            //设置读写的超时时间
            builder.socketTimeout(5000);
            ServerAddress address = new ServerAddress("localhost", 27017);
            client = new MongoClient(address, builder.build());
        }
    }

    //获取MongoDB数据库
    public static MongoDatabase getDatabase(String databaseName) {
        return client.getDatabase(databaseName);
    }

    //获取Mongo集合
    public static MongoCollection getCollection(String databaseName, String collectionName) {
        return getDatabase(databaseName).getCollection(collectionName);
    }
}
  1. Java代码演示
import com.alibaba.fastjson.JSON;
import com.example.demo.Demo.util01.MongoDBPoolUtil;
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.bson.types.ObjectId;

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

/**
 * 目前使用的池连方式链接MongoDB服务器, 访问:http://localhost:27017/
 * It looks like you are trying to access MongoDB over HTTP on the native driver port.
 */
public class Test01 {
    public static void main(String[] args) {
        // 2.操作集合
        // 2.1 创建集合
        /*MongoDatabase mapMongoDB = MongoDBPoolUtil.getDatabase("mapMongoDB");
        mapMongoDB.createCollection("macCode01");
        System.out.println("创建成功!");*/

        // 2.2 获取集合
        /*MongoCollection<Document> test = mapMongoDB.getCollection("macCode");
        System.out.println(test.getNamespace());*/
        // 输出:mapMongoDB.macCode

        // 2.3 删除集合
        /*MongoCollection<Document> dropTest = mapMongoDB.getCollection("macCode01");
        dropTest.drop();
        System.out.println("删除成功!");*/


        System.out.println("=====================Call Start=====================");

        // 调用3.1 单个文档插入
        /*insertSingleDocument();*/

        // 调用3.2 插入多个文档
        /*insertManyDocument();*/

        // 调用4.1 更新单个文档单个键
        /*updateSingleDocumentSingleKey();*/

        // 调用4.2 更新单个文档多个键
        /*updateSingleDocumentManyKey();*/


        // 调用5.1 查询所有文档
        /*searchAllDocument();*/

        // 调用5.2 根据ID检索文档
        searchDocumentById("mapMongoDB", "macCode");


    }

    // 3.插入文档
    // 3.1 单个文档插入
    private static void insertSingleDocument() {
        MongoCollection collection = MongoDBPoolUtil.getCollection("mapMongoDB", "macCode");
        Document document = new Document();
        document.append("UserName", "六个核桃").append("Age", 24).append("desc", "prefect");
        collection.insertOne(document);
        System.out.println("=====================添加单个文档成功!=====================");
    }

    // 3.2 插入多个文档
    private static void insertManyDocument() {
        MongoCollection collection = MongoDBPoolUtil.getCollection("mapMongoDB", "macCode");
        List<Document> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Document document = new Document();
            document.append("UserName", "捕获第" + i + "只瑶瑶").append("Age", 18 + i).append("desc", "prefect" + i);
            list.add(document);
        }
        collection.insertMany(list);
        System.out.println("=====================插入多个文档成功!=====================");
    }

    // 4.更新文档
    // 4.1 更新单个文档单个键 更新单个文档单个key
    private static void updateSingleDocumentSingleKey() {
        MongoCollection collection = MongoDBPoolUtil.getCollection("mapMongoDB", "macCode");
        collection.updateOne(Filters.eq("UserName", "六个核桃"), new Document("$set", new Document("Age", 100)));
        System.out.println("=====================更新单个文档单个键成功!=====================");
    }

    // 4.2 更新单个文档多个键
    private static void updateSingleDocumentManyKey() {
        MongoCollection collection = MongoDBPoolUtil.getCollection("mapMongoDB", "macCode");
        collection.updateOne(Filters.eq("UserName", "六个核桃"),
                new Document("$set", new Document("Age", 29).append("desc", "prefect5")));
        System.out.println("=====================更新单个文档多个键成功!=====================");
    }


    // 5.查询文档
    // 5.1 查询所有文档
    private static void searchAllDocument() {
        Integer sum = 0;
        MongoCollection collection = MongoDBPoolUtil.getCollection("mapMongoDB", "macCode");
        // 返回的是一个迭代器
        FindIterable<Document> iterable = collection.find();
        for (Document document : iterable) {
            sum++;
            System.out.println(JSON.toJSON(document));
//            System.out.println("循环第" + sum + "条数据为: " + document.get("UserName") + ",今年" + document.get("Age") + "岁!");
        }
        System.out.println("=====================查询所有文档成功!=====================");
        /* 输出
        循环第1条数据为: 露露,今年24岁!
        循环第2条数据为: 捕获第0只瑶瑶,今年18岁!
        循环第3条数据为: 捕获第1只瑶瑶,今年19岁!
        循环第4条数据为: 捕获第2只瑶瑶,今年20岁!
        循环第5条数据为: 捕获第3只瑶瑶,今年21岁!
        循环第6条数据为: 捕获第4只瑶瑶,今年22岁!*/
    }

    // 5.2 根据_id查询文档
    private static void searchDocumentById(String database, String collection1) {
        MongoCollection collection = MongoDBPoolUtil.getCollection(database, collection1);
        FindIterable<Document> iterable = collection.find(Filters.eq("_id", new ObjectId("60f14e1922aa312798d04128"))); //返回的是一个迭代器
        MongoCursor<Document> cursor = iterable.iterator();  //返回的是一个游标
        while (cursor.hasNext()) {
            Document document = cursor.next();
            System.out.println(document.get("UserName") + " " + document.get("Age"));
        }
    }
}

文档出处

  1. 转载出处:点击跳转 文章出自:青岑的博客
原文地址:https://www.cnblogs.com/Twittery/p/15031970.html