引入依赖
>
>org.springframework.boot >
>spring-boot-starter-data-mongodb >
>
配置文件
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远程连接服务器