JAVA语言操作MongoDB

Java语言操作MongoDB

  1. 使用场景

    数据量级非常大

    数据非常复杂,嵌套比较多,比如涉及评论的网站,论坛,博客

  2. MongoDB依赖

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

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>
  1. 使用Java实现MongoDB增删改查
package com.java.mongodb.test;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;

/**
 * @author Liushun
 * @date Created in 2019/8/20 14:23
 * @description MongoDB数据库的操作测试类
 */
public class MongoDBTest01 {

    // 客户端
    private MongoClient client = null;

    // MongoDB的数据库中的集合连接对象
    private MongoCollection<Document> bookCollection =  null;


    // 连接到MongoDB的数据库,连接到具体的集合
    @Before
    public void init(){
        // 1.连接到客户端
        client = new MongoClient("127.0.0.1",27017);
        // 2.连接到具体的操作的库
        MongoDatabase db = client.getDatabase("zhiheng");
        // 3.连接到库中具体操作的集合
        bookCollection = db.getCollection("books");
    }

    @After
    public void close(){
        // 测试完成后关闭客户端的连接
        client.close();
    }

    // 测试查询集合中的数据
    @Test
    public void test01(){
        // 执行查询数据
        FindIterable<Document> documents = bookCollection.find();
        // 进行分页查询
        documents.skip(0).limit(6);
        // 将查询的数据进行遍历输出
        documents.iterator().forEachRemaining(temp-> System.out.println(temp));
    }

    // 根据条件author="施耐庵"进行查询
    @Test
    public void test02(){
        // 设置查询的条件
        Document parDoc = new Document();
        parDoc.append("author","施耐庵");
        // 执行查询数据
        FindIterable<Document> documents = bookCollection.find(parDoc);
        // 进行分页查询
        documents.skip(0).limit(6);
        // 将查询的数据进行遍历输出
        documents.iterator().forEachRemaining(temp-> System.out.println(temp));
    }

    // 根据条件author="施耐庵"进行查询
    @Test
    public void test03(){
        // 设置查询条件
        Document parDoc = new Document(Document.parse("{'author':'施耐庵'}"));
        // 执行查询数据
        FindIterable<Document> documents = bookCollection.find(parDoc);
        // 进行分页查询
        documents.skip(0).limit(6);
        // 将查询的数据进行遍历输出
        documents.iterator().forEachRemaining(temp-> System.out.println(temp));
    }

    // 查询bname中以a结尾的所有数据,不区分大小写,价格区间为90-100
    @Test
    public void test04(){
        // String里面的格式为"{直接粘贴MongoDB语句}"
        String parStr = "{" +
                "\"bname\":{$regex:/a$/i},\n" +
                "    $and:[\n" +
                "        {\"price\":{$gte:90}},\n" +
                "        {\"price\":{$lte:100}}\n" +
                "    ]" +
                "}";
        // 设置查询条件
        Document parDoc = new Document(Document.parse(parStr));
        // 执行查询数据
        FindIterable<Document> documents = bookCollection.find(parDoc);
        // 进行分页查询
        documents.skip(0).limit(6);
        // 将查询的数据进行遍历输出
        documents.iterator().forEachRemaining(temp-> System.out.println(temp));
    }

    // 添加单条数据
    @Test
    public void test05(){
        // 添加的文档数据
        String insDoc = "{'bname':'大学','author':'曾参','price':118.9,'counts':120}";
        // 新建添加的文档对象
        Document document = new Document(Document.parse(insDoc));
        // 执行单个添加
        bookCollection.insertOne(document);
    }

    // 添加多个数据
    @Test
    public void test06(){
        // 添加的文档数据
        String insDoc1 = "{'bname':'大学1','author':'曾参','price':118.9,'counts':120}";
        // 新建添加的文档对象
        Document document1 = new Document(Document.parse(insDoc1));
        // 添加的文档数据
        String insDoc2 = "{'bname':'大学2','author':'曾参','price':118.9,'counts':120}";
        // 新建添加的文档对象
        Document document2 = new Document(Document.parse(insDoc2));
        // 添加的文档数据
        String insDoc3 = "{'bname':'大学3','author':'曾参','price':118.9,'counts':120}";
        // 新建添加的文档对象
        Document document3 = new Document(Document.parse(insDoc3));
        // 执行添加多个
        bookCollection.insertMany(Arrays.asList(document1,document2,document3));
    }

    // 通过循环添加多条数据
    @Test
    public void test07(){
        // 开始时间
        long startTime = System.currentTimeMillis();

        for (int i =1; i <= 100000; i++){
            // 新建添加的文档
            Document insDoc = new Document();
            insDoc.append("bname","zhiheng"+ i);
            insDoc.append("author","niubi");
            insDoc.append("price",i);
            insDoc.append("counts",i);
            bookCollection.insertOne(insDoc);
        }

        // 结束时间
        long endTime = System.currentTimeMillis();

        System.out.println("共消耗" + (endTime - startTime) / 1000 + "s");
    }

    // 测试条件删除
    @Test
    public void test08(){
        // 开始时间
        long startTime = System.currentTimeMillis();

        // 新建删除的条件
        Document delDoc = new Document(Document.parse("{'author':'niubi'}"));
        bookCollection.deleteMany(delDoc);

        // 结束时间
        long endTime = System.currentTimeMillis();

        System.out.println("共消耗" + (endTime - startTime) / 1000 + "s");
    }

    // 修改单个数据
    @Test
    public void test09(){
        // 修改的条件和内容
        String updDocStr1 = "{'author':'施耐庵'}";
        String updDocStr2 = "{$set:{'price':99}}";
        // 新建修改的文档内容
        Document updDoc1 = new Document(Document.parse(updDocStr1));
        Document updDoc2 = new Document(Document.parse(updDocStr2));
        // 执行修改
        bookCollection.updateOne(updDoc1,updDoc2);
    }

    // 修改多个数据
    @Test
    public void test10(){
        // 修改的条件和内容
        String updDocStr1 = "{'author':'施耐庵'}";
        String updDocStr2 = "{$set:{'price':98}}";
        // 新建修改的文档内容
        Document updDoc1 = new Document(Document.parse(updDocStr1));
        Document updDoc2 = new Document(Document.parse(updDocStr2));
        // 执行修改
        bookCollection.updateMany(updDoc1,updDoc2);
    }

    // 通过Bson作为条件进行查询
    @Test
    public void test11(){
        // 新建条件查询
        Bson gteBson = Filters.gte("price", 90);
        Bson lteBson = Filters.lte("price", 100);
        Bson andBson = Filters.and(gteBson, lteBson);
        // 执行查询
        FindIterable<Document> documents = bookCollection.find(andBson);
        // 进行分页查询
        documents.skip(0).limit(6);
        // 将查询的数据进行遍历输出
        documents.iterator().forEachRemaining(temp-> System.out.println(temp));

    }

    // 通过Bson作为条件进行查询
    @Test
    public void test12(){
        // 新建查询的条件
        Bson ltBson = Filters.lt("price", 100);
        Bson regexBson = Filters.regex("bname", "/a/i");
        Bson orBson = Filters.or(ltBson,regexBson);
        // 执行查询
        FindIterable<Document> documents = bookCollection.find(orBson);
        // 进行分页查询
        documents.skip(0).limit(10);
        // 将查询的数据进行遍历输出
        documents.iterator().forEachRemaining(temp-> System.out.println(temp));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值