MongoDB学习-Java连接

MongoDB学习–JDBC连接操作

使用JDBC连接MongoDB

  • 创建springboot工程,并导入mongoDB依赖和单元测试依赖,pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.study</groupId>
    <artifactId>mongo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mongo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>

        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
            <version>3.8.2</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency><dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  • 使用JDBC连接MongoDB有几种方式,下面代码是其中一种,首先新建mongoDB客户端,如果是在本地windows端启动的mongoDB服务,参数可以不填,会默认IP 127.0.0.1和port 27017,如果不是默认地址,则需要输入IP 和端口
  • getDataBase()是获取你想选择的数据库,等同于命令行里面的 use db
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("study");
        System.out.println("connection mongoDB  successfully");
        System.out.println("this db is : "+database.getName());
  • 执行下面代码,看到执行成功,并输出当前选择的数据库
    在这里插入图片描述
  • 除了上述连接方式,还有如下几种,不加以用代码展示
默认认证机制:
String user; // the user name
String database; // the name of the database in which the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createCredential(user, database, password);
MongoClient mongoClient = new MongoClient(new ServerAddress("host1", 27017),
                                         Arrays.asList(credential));

使用连接字符串而不明确指定认证机制:
MongoClientURI uri = new MongoClientURI("mongodb://user1:pwd1@host1/?authSource=db1");
MongoClient mongoClient = new MongoClient(uri);

对集合进行操作

  • getCollection()方法可以指定某一个集合,并对该集合来进行操作
  • listCollectionNames() 方法可以列出当前库下的所有集合
 //连接客户端
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        //选择数据库
        MongoDatabase database = mongoClient.getDatabase("test");
        System.out.println("connection mongoDB  successfully");
        System.out.println("this db is : "+database.getName());
        //获取某一个集合
        MongoCollection<Document> collection = database.getCollection("mongo-study");

        //获取改库的所有集合并且打印
        MongoIterable<String> strings = database.listCollectionNames();
        for (String string : strings) {

            System.out.println(string);
        }
  • 执行之后,输出结果为
    在这里插入图片描述

创建集合

  • 将连接的代码单独拿出来,避免重复代码
  • .createCollection(“newCollection”)方法可以用来创建集合,他是一个重载的方法,在创建集合时候可以选择一些自定义参数,也可以选择默认参数
    在这里插入图片描述
    在这里插入图片描述
public static MongoDatabase getDataBase(String db) {
        //连接客户端
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        //选择数据库
        MongoDatabase database = mongoClient.getDatabase(db);
        System.out.println("connection mongoDB  successfully");
        System.out.println("this db is : " + database.getName());
        return database;

    }

    @Test
    public void createCollection() {
        MongoDatabase test = getDataBase("test");
        test.createCollection("newCollection");
        System.out.println("create collection success");
        MongoIterable<String> strings = test.listCollectionNames();
        for (String string : strings) {
            System.out.println(string);
        }

    }
  • 以上代码执行之后,结果如下,新增了一个集合
    在这里插入图片描述

插入文档

  • getCollection()可以指定你插入文档到哪个集合
  • document对象用来封装你的数据
  • insertOne() 插入文档,有多种方法,insertMany可以一次插入多次,参数是集合
    在这里插入图片描述
 MongoDatabase test = getDataBase("test");
        //切换集合
        MongoCollection<Document> study = test.getCollection("newCollection");
        //新建文档对象
        Document document = new Document("_id", 2019-01).append("title", "插入文档1")
                .append("description", test.getName())
                .append("likes", 30)
                .append("by", "java")
                .append("name", "admin");
        Document document1 = new Document("_id", 2019-02).append("title", "插入文档2")
                .append("description", test.getName())
                .append("likes", 20)
                .append("by", "java")
                .append("name", "yunwei");
        Document document2 = new Document("_id", 2019-03).append("title", "插入文档3")
                .append("description", test.getName())
                .append("likes", 10)
                .append("by", "java")
                .append("name", "test");
        //执行插入单条数据
       // study.insertOne(document);
        ArrayList<Document> documents1 = new ArrayList<>();
        documents1.add(document);
        documents1.add(document1);
        documents1.add(document2);
        //一次插入多条数据
        study.insertMany(documents1);
        //查看所有文档
        FindIterable<Document> documents = study.find();
        for (Document documentOne : documents) {
            System.out.println(documentOne);
        }
  • 执行代码,得到的输出如下图
    在这里插入图片描述

更新文档

  • 更新操作,需要先找到该文档,然后在执行对应的操作,执行下列代码,返回结果
  • 还有很多方法,不一一举例
    在这里插入图片描述
 MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        FindIterable<Document> documents = study.find();

        for (Document document1 : documents) {
            System.out.println("更新前"+document1);
        }

        study.updateOne(eq("_id", 2016), new Document("$set", new Document("title", "更新文档1")));
        for (Document document1 : documents) {
            System.out.println("更新后"+document1);
        }

在这里插入图片描述

删除文档

  • 采用findAndDelete(),直接进行删除,eq后面可以接其他条件,具体的方法可以在源码中查看
       MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        FindIterable<Document> documents = study.find();

        for (Document document1 : documents) {
            System.out.println("删除前"+document1);
        }


        study.findOneAndDelete(eq("_id", 2016));
        for (Document document1 : documents) {
            System.out.println("删除后"+document1);
        }
    }

在这里插入图片描述

查询文档

1、一个条件精准查询
 @Test
    public void findDocument() {
        MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        //查询所有
        FindIterable<Document> documents = study.find();
        //封装查询对象
        BasicDBObject query = new BasicDBObject();
        //存入键值对,键是指文档的键,值是你需要匹配的值
        query.put("title","插入文档1");
        FindIterable<Document> result = study.find(query);
        for (Document document : result) {
            System.out.println("查询的结果"+document);
        }

    }
  • 执行结果如下图
    在这里插入图片描述
2、多条件查询
  • 查询likes大于30且by=java 数据
      @Test
    public void findDocumentBetween() {
        MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        //查询所有
        FindIterable<Document> documents = study.find();
        for (Document document : documents) {
            System.out.println(document);
        }
        //封装查询对象
        BasicDBObject query = new BasicDBObject();
       //查找条件是小于30
        //比较符
        //"$gt": 大于
        //"$gte":大于等于
        //"$lt": 小于
        //"$lte":小于等于
        //"$in": 包含
        BasicDBObject more= new BasicDBObject("$gt", 30);
        //存入键值对,键是指文档的键,值是你需要匹配的值
        query.put("likes",more);
        query.put("by","java");
        FindIterable<Document> result = study.find(query);
        for (Document document : result) {
            System.out.println("查询的结果"+document);
        }

    }
  • 输出结果
    在这里插入图片描述
3、区间查询
  • eg 查询likes > 50 的数据
 @Test
    public void findDocumentBetween() {
        MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        //查询所有
        FindIterable<Document> documents = study.find();
        for (Document document : documents) {
            System.out.println(document);
        }
        BasicDBObject query = new BasicDBObject();
        query = new BasicDBObject();
        query.put("likes", new BasicDBObject("$gt", 50)); // e.g. find all where i >
        FindIterable<Document> result = study.find(query);
        for (Document document : result) {
            System.out.println("查询的结果"+document);
        }

    }
  • 执行结果
    在这里插入图片描述
4、分页查询和模糊查询
 /** 
     * 分页查询    
     */  
    @Test
    public void findDocumentBetween() {
        MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        //查询所有的前四条
        FindIterable<Document> documents = study.find().skip(0).limit(4);
        for (Document document : documents) {
            System.out.println(document);
        }
        BasicDBObject query = new BasicDBObject();
        query = new BasicDBObject();
        query.put("likes", new BasicDBObject("$gt", 30)); // e.g. find all where i >
        //查询likes>30的数据中的前两条数据
        FindIterable<Document> result = study.find(query).skip(0).limit(2);
        for (Document document : result) {
            System.out.println("查询的结果"+document);
        }

    }
  
    /** 
     * 模糊查询 
     */  
        @Test
    public void findDocumentBetween() {
        MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        //查询所有的前四条
        FindIterable<Document> documents = study.find().skip(0).limit(4);
        for (Document document : documents) {
            System.out.println(document);
        }
        BasicDBObject query = new BasicDBObject();
        Pattern compile = Pattern.compile("插入文?");
        query.put("title", compile); // e.g. find all where title like
        //查询title like 插入文   的数据中的前两条数据
        FindIterable<Document> result = study.find(query).skip(0).limit(2);
        for (Document document : result) {
            System.out.println("查询的结果" + document);
        }

    }
5、或查询
 @Test
    public void test01(){

        MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        QueryBuilder query = new QueryBuilder();
        //where likes = 30 or title = 插入文档1
        query.or(new BasicDBObject("likes", 20), new BasicDBObject("title", "插入文档1"));
        FindIterable<Document> documents = study.find((Bson) query.get());
        for (Document document : documents) {
            System.out.println(document);
        }


    }
  • 执行结果
    在这里插入图片描述
6、in查询
 @Test
    public void test01(){

        MongoDatabase test = getDataBase("test");

        MongoCollection<Document> study = test.getCollection("newCollection");
        BasicDBList values = new BasicDBList();
        values.add(10);
        values.add(20);
        values.add(30);
        BasicDBObject in = new BasicDBObject("$in", values);
        //where likes in ()
        FindIterable<Document> likes = study.find(new BasicDBObject("likes", in));
        for (Document document : likes) {

            System.out.println(document);
        }


    }
  • 执行结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值