Java 杂谈互联网科技Spring-Boot

MongoDB系列-- SpringBoot 中对 MongoD

2019-08-21  本文已影响3人  刀哥说Java

SpringBoot 中对 MongoDB 的 基本操作

Database 库的创建

首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库:

image

增加用户User:

image

创建 Collections 集合(类似mysql 中的 表):

image

后面我们大部分都是基于创建的Collection “collectiondemo”操作的。

依赖包

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version> 2.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version> 2.1.7.RELEASE</version>
        </dependency>

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

SpringBoot 中 application.properties 文件配置

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mongodemo
spring.data.mongodb.username=login
spring.data.mongodb.password=login

MongoDB 中的 增删改查 操作

定义 MongoTemplate

     @Autowired
    private MongoTemplate mongoTemplate;

    private static String COLLECTION_DEMO = "collectiondemo";

基于 mongoTemplate 操作

添加数据
   @PostMapping("/insertDocument")
    public void insertDocument(String document) {
        //获取集合
        MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
        Document parse = Document.parse(document);
        //插入文档
        collection.insertOne(parse);
    }

postman 测试参数:

image

在 Robo 中 可以查询到:

image

添加数据成功 ,其中 ObjectId是一个12字节的 BSON 类型字符串, 由

image

组成

插入数据

    @PutMapping("/updateDocument")
    public Long updateDocument(String queryDocument, String ducument) {
        MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
        BasicDBObject queryParse = BasicDBObject.parse(queryDocument);
        BasicDBObject parse = BasicDBObject.parse(ducument);
        UpdateResult result = collection.updateOne(queryParse, new BasicDBObject("$set",parse));
        return result.getModifiedCount();
    }

输入参数:

image

可以看到:

image

但有个问题,当参数中 key 在 mongodb 不存在时,会自己创建:

image

之前mongodb并没有 age 字段,现在可以看到:

image

这可能对有些业务场景,对key要求严格的 就无法通过这个满足条件 ,此时mongodb 中 可以用$exists 解决:

    @PutMapping("/updateDocumentOnlyHave")
    public Long updateDocumentOnlyHave(String id, String ducument) {
        MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
        BasicDBObject parse = BasicDBObject.parse(ducument);
        Set<String> keySet = parse.keySet();
        BasicDBObject dbObject = new BasicDBObject();
        dbObject.put("id",id);
        for (String key : keySet) {
            dbObject.put(key, new BasicDBObject("$exists",true));
        }
        UpdateResult result = collection.updateOne(dbObject, new BasicDBObject("$set",parse));
        return result.getModifiedCount();
    }

查询数据

    @GetMapping("/listDocuments")
    public List<Document> findDocuments() {
        MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
        FindIterable<Document> documents = collection.find();
        List<Document> listDocuments = new ArrayList<>();
        for (Document document : documents) {
            listDocuments.add(document);
        }
        return listDocuments;
    }

删除数据

  @DeleteMapping("/deleteDocument")
    public DeleteResult deleteDocument(String name) {
        MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
        DeleteResult result = collection.deleteOne(new BasicDBObject("name", name));
        return result;
    }
上一篇下一篇

猜你喜欢

热点阅读