Mongotemplate基本使用
Joel
发布于 2022-06-14 / 869 阅读 / 0 评论 / 1 点赞

Mongotemplate基本使用

常用注解

@Document
使用@Document(org.springframework.data.mongodb.core.mapping.Document)标注Java的类名对应的MongoDB的集合名称。

@Id、@MongoId
使用@Id(org.springframework.data.annotation.Id)或@MongoId(低版本依赖可能需升级才有)映射MongoDB的_id字段,若没有使用这两个注解,则字段中名称为id的字段将自动映射到_id上。使用这两个注解可标注的字段类型为String、ObjectId(org.bson.types.ObjectId)。

@Field
使用@Field(org.springframework.data.mongodb.core.mapping.Field)字段,将Java类中字段名称与MongoDB集合中字段名称不一致的字段映射成一致的。如Java中使用了驼峰命名的startTs字段,想要映射成MongoDB中的start_ts字段就可以使用@Field完成。

@Transient
使用@Transient(org.springframework.data.annotation.Transient)标注该字段不持久化至数据库中。

import lombok.Builder;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.Date;

@Data
@Builder
@Document("worker")
public class Worker {

    @Id
    private Integer id;

    private String name;

    @Field(value = "worker_id")
    private String workerId;

    @Field(value = "depart_id")
    private String departId;

    @Field(value = "worker_sex")
    private String workerSex;

    @Field(value = "worker_birthday")
    private Date workerBirthday;

}
	//插入
        Worker worker = Worker.builder()
                .id(Long.parseLong("1"))
                .name("test")
                .workerId("007")
                .departId("996")
                .workerSex("male")
                .salary(new BigDecimal("10000"))
                .workerBirthday(new Date())
                .build();
        mongoTemplate.save(worker);
        
        //更新某个字段
        Query query = Query.query(Criteria.where("_id").is(worker.getId()));
        Update update = new Update();
        update.set("depart_id", "java");
        mongoTemplate.upsert(query, update, Worker.class);
        
        //查询
        List<Worker> workers = mongoTemplate.find(query, Worker.class);
        //统计条数
        long count = mongoTemplate.count(query, "worker");
        
        //分页
        int currentPage = 1;
        int pageSize = 1;
        //设置起始数
        query.skip((currentPage - 1) * pageSize);
        //设置查询条数
        query.limit(pageSize);
        workers = mongoTemplate.find(Query.query(Criteria.where("depart_id").is("java")).skip((currentPage - 1) * pageSize).limit(pageSize), Worker.class);
        
        //排序
        workers = mongoTemplate.find(Query.query(Criteria.where("depart_id").is("java")).skip((currentPage - 1) * pageSize).limit(pageSize).with(Sort.by(
                Sort.Order.desc("worker_id")
        )), Worker.class);
        
        //分组统计
        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(Criteria.where("worker_sex").is("male")),
                Aggregation.group("depart_id").count().as("count")//部门人数
                        .sum("salary").as("salary")//部门工资
        );
        List<Map> mappedResults = mongoTemplate.aggregate(aggregation, "worker", Map.class).getMappedResults();

评论