1. 程式人生 > 其它 >MongoDB 入門實戰(5)--Spring Data MongoDB 操作 MongoDB

MongoDB 入門實戰(5)--Spring Data MongoDB 操作 MongoDB

Spring Data MongoDB 是的 Spring Data 家族的一部分,可輕鬆配置並訪問 MongoDB。 本文主要介紹在 SpringBoot 中使用 Spring Data MongoDB 操作 MongoDB,使用到的軟體版本:Java 1.8.0_191、MongoDB 5.0.5、Spring Boot 2.4.13。

1、引入依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</
artifactId> <version>2.4.13</version> <relativePath /> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <
dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</
artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>

2、配置 MongoDB(application.yml)

spring:
  data:
    mongodb:
      host: 10.40.96.10
      port: 27017
      database: testdb

3、操作 MongoDB

通過 Spring 提供的 MongoTemplate 來操作 MongoDB。

package com.abc.demo.mongodb;

import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit4.SpringRunner;

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

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodbCase {
    private static Logger logger = LoggerFactory.getLogger(MongodbCase.class);

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 建立集合
     */
    @Test
    public void createCollection() {
        mongoTemplate.createCollection("col1");
    }

    /**
     * 獲取集合
     */
    @Test
    public void getCollection() {
        MongoCollection<Document> collection = mongoTemplate.getCollection("col1");
        logger.info(collection.countDocuments() + "");
    }

    /**
     * 刪除集合
     */
    @Test
    public void dropCollection() {
        mongoTemplate.dropCollection("col1");
    }

    /**
     * 插入文件
     */
    @Test
    public void insetDocumnet() {
        MongoCollection<Document> collection = mongoTemplate.getCollection("col1");

        List<Document> documents = new ArrayList<>();
        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() {
        MongoCollection<Document> collection = mongoTemplate.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() {
        MongoCollection<Document> collection = mongoTemplate.getCollection("col1");

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

    /**
     * 刪除文件
     */
    @Test
    public void deleteDocumnet() {
        MongoCollection<Document> collection = mongoTemplate.getCollection("col1");

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