mongoDB -- springboot 連接配置 及 mongoTemplate 基本使用


1、配置

1.1、pom.xml

 <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

1.2、 application.yml 配置

spring:
  data:
    mongodb:
      host: 192.168.20.101
      port: 27017
      database: test
      username: accountUser
      password: 123456

以上配置會報錯:org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential{.......

改為以下方式:

spring:
  data:
    mongodb:
      uri: mongodb://accountUser:123456@192.168.20.101:27017/test?authSource=admin    # 開啟了用戶驗證
#      uri: mongodb://192.168.20.101:27017/test

注意:uri 中的用戶必須是該數據庫自己的用戶, 如果使用 admin 數據庫的超級用戶也會報用戶驗證的錯誤。
一開始使用的用戶是 admin 數據庫的用戶,給的權限是 readWriteAnyDatabase ,插入數據時出現 用戶驗證的錯誤。

uri 格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
username:password@ 可選項,如果設置,在連接數據庫服務器之后,驅動都會嘗試登錄這個數據庫
host1 必須的指定至少一個host, host1 是這個URI唯一要填寫的。它指定了要連接服務器的地址。如果要連接復制集,請指定多個主機地址。
portX 可選的指定端口,如果不填,默認為27017
/database 如果指定username:password@,連接並驗證登錄指定數據庫。若不指定,默認打開 test 數據庫。
?options 是連接選項。如果不使用/database,則前面需要加上/。所有連接選項都是鍵值對name=value,鍵值對之間通過&或;(分號)隔開

authSource 是 options中的一個,表示 用戶名在那個數據庫上創建的,需在在該數據庫驗證。如果指定了實際連接的數據庫,且沒有設置 authSource,則authSource是實際連接的庫。如果都沒設置,則authSource是admin

連接方式:https://www.cnblogs.com/zhanglw456/p/14607392.html

2、mongoTemplate 基本使用

2.1 常用方法

mongoTemplate.findAll(Student.class): 查詢Student文檔的全部數據
mongoTemplate.findById(<id>, Student.class): 查詢Student文檔id為id的數據
mongoTemplate.find(query, Student.class);: 根據query內的查詢條件查詢

updateFirst(Query query, UpdateDefinition update, Class<?> entityClass) 更新匹配到的第一條
updateMulti(Query query, UpdateDefinition update, Class<?> entityClass) 更新多條
mongoTemplate.upsert(query, update, Student.class): 有就更新,無則新增

mongoTemplate.remove(student): 根據id刪除
mongoTemplate.remove(query, Student.class): 刪除

mongoTemplate.insert(student): 新增

2.2 Query對象

1 創建一個query對象(用來封裝所有條件對象),再創建一個criteria對象(用來構建條件)
2 精准條件:criteria.and(“key”).is(“條件”)
模糊條件:criteria.and(“key”).regex(“條件”)
3、封裝條件:query.addCriteria(criteria)
4、大於(創建新的criteria):Criteria gt = Criteria.where(“key”).gt(“條件”)
小於(創建新的criteria):Criteria lt = Criteria.where(“key”).lt(“條件”)
5、Query.addCriteria(new Criteria().andOperator(gt,lt));
6、一個query中只能有一個andOperator()。其參數也可以是Criteria數組。
7、排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))

2.3 代碼示例:


    // 分頁 使用 Pageable 查詢
    // 也可 直接使用query.skip(offset).limit(count) 查詢
    Pageable pageable = PageRequest.of(page, count);  // page 表示第幾頁,從 0 開始, count表示每頁條數
    Query query = new Query();
    //動態拼接查詢條件
    if(StringUtils.isNotBlank(typeCtg)){
        query.addCriteria(Criteria.where("type_ctg").is(typeCtg));
    }
    if(StringUtils.isNotBlank(type)){
        query.addCriteria(Criteria.where("type").is(type));
    }
    if(StringUtils.isNotBlank(company)){
        query.addCriteria(Criteria.where("company").is(company));
    }
    //獲取總條數
    long count1 = mongoTemplate.count(query,AssetIdentifier.class);
    List<AssetIdentifier> identifierList = mongoTemplate.find(query.with(pageable), AssetIdentifier.class);  // 執行查詢 
 public void mongoTemplateSample(FormDataApproval formDataApproval) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(formDataApproval.getId()).and("tenant_id").is(formDataApproval.getTenantId()));

        Update update = new Update();
        update.set("process_id", formDataApproval.getProcessId());

        List<FormDataApproval> list = new ArrayList<>();
        list.add(formDataApproval);

        /**
         * 數據庫有,就新增, 沒有,就修改
         */
        mongoTemplate.upsert(query, update, FormData.class, "formData");
  
        /**
         * 修改方法
         */
        // 無實際意義,不推薦使用
        mongoTemplate.update(FormDataApproval.class);
        mongoTemplate.updateFirst(query, update, FormDataApproval.class, "formDataApproval");
        mongoTemplate.updateMulti(query, update, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findAndModify(query, update, FormDataApproval.class, "formDataApproval");

        /**
         * 查詢方法
         */
        mongoTemplate.find(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findOne(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findAll(FormDataApproval.class, "formDataApproval");
        mongoTemplate.findById(formDataApproval.getId(), FormDataApproval.class, "formDataApproval");

        /**
         * 刪除方法
         */
        mongoTemplate.remove(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findAndRemove(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findAllAndRemove(query, FormDataApproval.class, "formDataApproval");

        /**
         * 新增方法
         */
        mongoTemplate.save(formDataApproval, "formDataApproval"); // 同upsert(),沒有新增,有修改
        mongoTemplate.insert(formDataApproval, "formDataApproval");
        mongoTemplate.insertAll(list);

}

參考:
https://www.jianshu.com/p/a576499769ae
https://blog.csdn.net/qq_37707251/article/details/85172545
https://blog.csdn.net/leinminna/article/details/101277443

官網api:
https://docs.spring.io/spring-data/data-mongo/docs/3.1.7/api/
https://docs.spring.io/spring-data/data-mongo/docs/3.1.7/api/org/springframework/data/mongodb/core/MongoTemplate.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM