<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    mongoTemplate的方法和update()

    1.引言

    mongoTemplate提供了許多的方法,許多的類似的方法,剛開始不知道使用哪一種最好,現在,我把他們整理如下,方便大家選擇使用。

    2.常用方法

        /**
         * 每個操作帶上collectionName, 效率提高許多,并且,防止子類錯誤操作
         *
         * @param formDataApproval 對象
         * @author leimin
         */
        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);
        }
    

    3.批量修改

        /**
         * 批量修改 formData
         *
         * @param formDataList formDatas
         * @author leimin
         */
        @Override
        public void updateFormDatas(List<FormData> formDataList) {
    
            if (CollectionUtils.isEmpty(formDataList)) {
                return;
            }
    
            BulkOperations operations = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, Const.COLLECTION_FORM_DATA);
            List<Pair<Query, Update>> list = new ArrayList<>();
    
            for (FormData formData : formDataList) {
    
                Query query = new Query();
                query.addCriteria(Criteria.where("_id").is(formData.getId()).and("tenant_id").is(formData.getTenantId()));
                Update update = new Update();
                update = mongoUtil.getUpdateFormDataAll(formData, update);
                Pair<Query, Update> pair = Pair.of(query, update);
                list.add(pair);
            }
    
            operations.updateMulti(list);
            operations.execute();
        }
    

    4.其他方法

        /**
         * 類似于mongo原生sql的操作
         * 不推薦使用
         *
         * @author leimin
         */
        public void mongoTempalteAsOriginal() {
    
            // 查詢該集合中的所有文檔
            MongoCollection<Document> formDataApprovalDocument = mongoTemplate.getCollection("formDataApproval");
    
            // 新增
            formDataApprovalDocument.insertOne();
            formDataApprovalDocument.insertMany();
    
            // 刪除
            formDataApprovalDocument.deleteOne();
            formDataApprovalDocument.deleteMany();
            formDataApprovalDocument.findOneAndDelete();
    
            // 修改
            formDataApprovalDocument.updateOne();
            formDataApprovalDocument.updateMany();
            formDataApprovalDocument.findOneAndUpdate();
            formDataApprovalDocument.replaceOne();
            formDataApprovalDocument.findOneAndReplace();
    
            // 查詢
            formDataApprovalDocument.find();
    
            // 獲取集合name
            mongoTemplate.getCollectionName(FormDataApproval.class);
        }
    
    第一次使用mongoDB來開發java項目,整合了Spring,有一個user類,里面有id,name和password,想在修改的時候直接傳入一個user對象,因為之前mysql的時候一直是這么干的。。。但是測試時發現不起作用,因為關于mongoTemplate的文檔比較少,也一直沒查到,所以有幾個問題想請教一下高手,望不吝賜教,謝謝! service相關代碼 ``` public int updateUser(User user) { mongoTemplate.updateFirst(new Query(Criteria.where("id").is(user.getId())),Update.update("user", user), User.class, USER_COLLECTION); return 0; } ``` ---- 測試類相關代碼 ``` @Test public void userAddTest() throws Exception { User user = new User(); user.setName("zhangsan"); user.setPassword("123abc"); userService.addUser(user); List<User> list = userService.listAll(); for (User user2 : list) { System.out.println(user2.getName()); System.out.println(user2.getPassword()); } System.out.println("*********************"); user.setName("lisi"); userService.updateUser(user); list = userService.listAll(); for (User user2 : list) { System.out.println(user2.getName()); System.out.println(user2.getPassword()); } } ``` 測試結果: ``` zhangsan 123abc ********************* zhangsan 123abc ``` 對了,還有一個問題,就是那個Update類中的update(String key, Object Value)里面的key 和 value是什么?因為在文檔里沒有查到……所以還煩請一并賜教,謝謝~
    ??2020 CSDN 皮膚主題: 技術黑板 設計師:CSDN官方博客 返回首頁
    多乐彩