<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring:
data:
mongodb:
uri: mongodb://testUser:testPassword@192.168.1.101:27017/testDB
使用@Document(org.springframework.data.mongodb.core.mapping.Document)标注Java的类名对应的MongoDB的集合名称。
使用@Id(org.springframework.data.annotation.Id)或@MongoId(低版本依赖可能需升级才有)映射MongoDB的_id字段,若没有使用这两个注解,则字段中名称为id的字段将自动映射到_id上。使用这两个注解可标注的字段类型为String、ObjectId(org.bson.types.ObjectId)。
使用@Field(org.springframework.data.mongodb.core.mapping.Field)字段,将Java类中字段名称与MongoDB集合中字段名称不一致的字段映射成一致的。如Java中使用了驼峰命名的startTs字段,想要映射成MongoDB中的start_ts字段就可以使用@Field完成
使用@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类可实现对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可用于分页查询
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);
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);
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);
}
}
https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#reference