美文网首页Java 杂谈互联网科技Spring-Boot
MongoDB系列-- SpringBoot 中对 MongoD

MongoDB系列-- SpringBoot 中对 MongoD

作者: 刀哥说Java | 来源:发表于2019-08-21 16:03 被阅读3次

    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;
        }
    

    相关文章

      网友评论

        本文标题:MongoDB系列-- SpringBoot 中对 MongoD

        本文链接:https://www.haomeiwen.com/subject/luhisctx.html