web123456

Methods and updates of mongoTemplate

1. Introduction

mongoTemplate provides many methods, many similar methods. At the beginning, I didn’t know which one is best to use. Now, I have sorted them out as follows to facilitate everyone’s choice.

2. Common methods

    /**
      * Each operation has a collectionName, which improves efficiency much and prevents subclass error operations.
      *
      * @param formDataApproval object
      * @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);

        /**
          * If the database has it, it will be added; if there is no, it will be modified
          */
        mongoTemplate.upsert(query, update, FormData.class, "formData");
  
        /**
          * Modification method
          */
        // No practical meaning, not recommended
        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");

        /**
          * Query method
          */
        mongoTemplate.find(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findOne(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findAll(FormDataApproval.class, "formDataApproval");
        mongoTemplate.findById(formDataApproval.getId(), FormDataApproval.class, "formDataApproval");

        /**
          * Delete method
          */
        mongoTemplate.remove(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findAndRemove(query, FormDataApproval.class, "formDataApproval");
        mongoTemplate.findAllAndRemove(query, FormDataApproval.class, "formDataApproval");

        /**
          * New method
          */
        mongoTemplate.save(formDataApproval, "formDataApproval"); // Same upsert(), no new additions, and modifications
        mongoTemplate.insert(formDataApproval, "formDataApproval");
        mongoTemplate.insertAll(list);
    }

3. Batch modification

    /**
      * Batch modification 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. Other methods

    /**
      * Operations similar to mongo native sql
      * Not recommended
      *
      * @author leimin
      */
    public void mongoTempalteAsOriginal() {

        // Query all documents in the collection
        MongoCollection<Document> formDataApprovalDocument = mongoTemplate.getCollection("formDataApproval");

        // Added
        formDataApprovalDocument.insertOne();
        formDataApprovalDocument.insertMany();

        // delete
        formDataApprovalDocument.deleteOne();
        formDataApprovalDocument.deleteMany();
        formDataApprovalDocument.findOneAndDelete();

        // Revise
        formDataApprovalDocument.updateOne();
        formDataApprovalDocument.updateMany();
        formDataApprovalDocument.findOneAndUpdate();
        formDataApprovalDocument.replaceOne();
        formDataApprovalDocument.findOneAndReplace();

        // Query
        formDataApprovalDocument.find();

        // Get the collection name
        mongoTemplate.getCollectionName(FormDataApproval.class);
    }