springboot MongoTemplate的使用

mongoTemplate的使用

  • 1. 说明
  • 2.1 查询(返回全部数据结构)
  • 2.2 查询(只返回部分结果)
  • 3.添加

1. 说明

在开发中遇到使用mongodb来进行查询和存储的功能需求,记性太差,记录下使用的方法。
项目结构:springboot 2.2.1release + gradle + spring-boot-starter-data-mongodb
QualityDataOutputDTO组成说明(因为这个类封装了很多层,封装的时候出现过封装不进去的问题):

@Getter
@Setter
@Document(collection = "db中collection的名字,对应实体类")
//这是第一层
public class QualityDataOutputDTO {

    @Id//id
    private String _id;

    private Info info;

    private Double time;

}

//这是第二层,属性里面还有封装了很多层,这里就没必要展示了
@Getter
@Setter
public class Info {
	//之前就是在info属性里面没有加@Field注解指定字段,导致封装不进去,特别注意一下
    @Field("ConfQos")
    private ConfQos confQos;

    @Field("ConfQoe")
    private ConfQoe confQoe;

    @Field("ConfAttr")
    private ConfAttr confAttr;

    @Field("timestamp")
    private String timestamp;
}

2.1 查询(返回全部数据结构)

    //创建查询条件criteria,where后面跟db字段名,is后面跟传入的值,进行精确查询相当于‘=’
    //用and符号添加其他条件
	Criteria criteria = Criteria.where("callId").is(callId). and("actorId").is(actorId);
    Query query = new Query(criteria);
    //用findOne方法,查询结果只返回一个,find方法返回一个list集合,把query和封装的实体类class对象添加进去
    QualityDataOutputDTO qualityDataOutputDTO= mongoTemplate.findOne(query, QualityDataOutputDTO.class);

2.2 查询(只返回部分结果)

	//query的另一种写法
	Query query = Query.query(Criteria.where("info.ConfAttr.room_id").is(callIdStr));
	// 只获取qoe部分,这个是重点fields().include("字段名")只包含这个字段
	//另外我尝试了下include和exclude一起写,就报错了,提示两者只能存在一个,要么写包含的字段,要么写排除的字段
	//返回的QualityDataOutputDTO中只有info.ConfQoe有值,其他属性为null
	query.fields().include("info.ConfQoe");
	List<QualityDataOutputDTO> list = mongoTemplate.find(query, QualityDataOutputDTO.class);

3.添加

//直接调用save方法,把实体类封装好添加进去,实体类中@Document(collection = "db中collection的名字,对应实体类")
mongoTemplate.save(meetingQualityEntity)

ps: 每天记录一点,进步一点! 写的不好,如果有问题欢迎大家一起讨论~

你可能感兴趣的:(mongodb)