SpringBoot 中 MongoDB 的简单使用

一、SpringBoot 中 MongoDB 的简单使用

(1)pom 依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
(2)yml配置
spring:
  data:
    mongodb:
      uri: mongodb://ydt:ydtnb@123.123.123.123:27017/ydt?authSource=ydt
(3)代码
@Resource
private MongoTemplate mongoTemplate;

/**
 * 新增数据示例,jl_gps 集合没有会自动创建
 */
public void testSave() {
    BJlGps jlGps = new BJlGps();
    ...
    mongoTemplate.save(x, "jl_gps")
}

/**
 * 查询数据示例
 */
public void testQuery() {
    List<TestEntity> list = new ArrayList();
    
    Query query = new Query();
    Criteria criteria = new Criteria();
    
    String dwid = getDwid();
    
    // 模糊查询
    criteria.where("dwid").regex("^.*" + dwid + ".*$");
    /* 精确查询 */
    if (StringUtil.isNotEmpty(type)) {
        criteria.and("type").is(type);
    }
    /* 范围查询 */
    if (StringUtil.isNotEmpty(sDate) && StringUtil.isNotEmpty(eDate)) {
        criteria.and("dt")
            .gte(DateUtil.strToDateLong(sDate))
            .lt(DateUtil.strToDateLong(eDate));
    }
    query.addCriteria(criteria);
    
    // 执行查询,反馈结果集
    list = mongoTemplate.find(query, TestEntity.class, "test");
}

二、问题补充(问题提出者:王)

问题一:使用 MongoTemplate 查询数据第一次会比较慢

原因:第一次查询会先建立连接,导致查询慢
解决方案:在项目启动时建立连接
@Component
public class MongoConnTask implements ApplicationRunner {
    /**
     * Springboot启动时,注入 MongoTemplate ,即可创建连接
     */
    @Resource
    private MongoTemplate mongoTemplate;
    
    
    @Override
    public void run(ApplicationArguments args) throws Exception {
        
    }
}

问题二:可视化工具中查看时间相关数据,发现与存进去的时间少 8 小时

原因:MongoDB 存储时间为标准时间,UTC +0:00。中国标准时间为 UTC +8:00。
解决方案:无需解决

MongoTemplate 在取数据时,会自动加 8H,保证存取一致。

上一篇:springboot整合mongodb MongoTemplate和MongoRepository的用法


下一篇:过滤器模式