mongoTemplate

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

配置文件

spring.data.mongodb.uri=mongodb://localhost/test

常用注解

  • @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)标注该字段不持久化至数据库中。

示例

@Document("test_dto")
public class TestDto {

    @Id
    private String id;
//    @MongoId
//    private String id;

    @Field("create_ts")
    private long createTs;

    @Transient
    private String ignoreProperty;

}

MongoTemplate
注入MongoTemplate类可实现对MongoDB的增删改查操作。

查询条件
使用Query构建查询条件。示例如下:

_id等于具体值

Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));

status等于某个值,并且更新时间大于某个值

Query query = Query.query(Criteria.where("status").is("ONLINE").and("update_ts").lte(System.currentTimeMillis()));

skip(从第几页开始)、limit(展示多少页)可用于分页查询,with、Sort、Order可用于排序(多个Order为组合排序)

Criteria criteria1 = Criteria.where("status").is("ONLINE");
Criteria criteria2 = Criteria.where("update_ts").lte(System.currentTimeMillis());
Query query = new Query();
query.addCriteria(criteria1);
query.addCriteria(criteria2);
query.skip(100);
query.limit(10);
query.with(Sort.by(Sort.Order.desc("_id"), Sort.Order.asc("create_ts")));

regex正则匹配模糊查询

Query query = new Query();
//使用正则表达是进行模糊查询,相当于“%yang%”
Pattern pattern = Pattern.compile(".*yang.*");
query.addCriteria(Criteria.where("username").regex(pattern).and("age").is("20"));


insert和save。两者区别如下:

插入重复数据时:insert报DuplicateKeyException提示主键重复;save对已存在的数据进行更新。
批处理操作时:insert可以一次性插入整个数据,效率较高;save需遍历整个数据,一次插入或更新,效率较低。

public class TestService {

    @Resource
    private MongoTemplate mongoTemplate;

    public void add(TestDto TestDto) {
        mongoTemplate.insert(TestDto);
        //mongoTemplate.save(TestDto);
    }
}


可使用映射对象或Query对象,使用remove进行删除。

public class TestService {

    @Resource
    private MongoTemplate mongoTemplate;

    public void delete1() {
        TestDto testDto = TestDto.builder().id("5e786517e9babf45a79fda46").build();
        DeleteResult deleteResult = mongoTemplate.remove(testDto);
    }

    public void delete2() {
        Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));
        DeleteResult deleteResult = mongoTemplate.remove(query, TestDto.class);
    }

}


updateFirst更新一个,updateMulti更新多个。

public class TestService {

    @Resource
    private MongoTemplate mongoTemplate;

    public void update() {
        Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));
        Update update = Update.update("update_ts", System.currentTimeMillis())
                        .set("status", "ONLINE");
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, TestDto.class);

    }
}


find查询集合,findOne查询一个。

public class TestService {
    @Resource
    private MongoTemplate mongoTemplate;

    public void queryList() {
        Query query = Query.query(Criteria.where("status").is("ONLINE").and("update_ts").lte(System.currentTimeMillis()))
                .skip(1000)
                .limit(10)
                .with(Sort.by(Sort.Order.desc("_id")));
        List<TestDto> testDtos = mongoTemplate.find(query, TestDto.class);
    }

    public void queryOne() {
        Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));
        TestDto testDto = mongoTemplate.findOne(query, TestDto.class);
    }
}

使用mondb Compass远程连接服务器

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值