前言:
spring-boot-starter-data-mongodb 是springboot官方出的starter,集成和操作相对方便;如果是非 springboot 工程可以使用 mongo-java-driver。
一、依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.7.0</version>
</dependency>
二、配置
spring:
data:
mongodb:
username: [user]
password: [pwd]
host: [ip]
port: [port]
database: [db] #操作库
authentication-database: [db] #认证库
# uri: mongodb://[user]:[pwd]@[ip]:[port]/[db]?[option]
两种配置方式:第一种是 uri 的方式(上述注销的那种),集群配置时每个ip:port用逗号隔开;第二种如上述,看起来清晰一些;两种方式没有优劣之分,看个人喜好。
三、插入数据
下述截取部分业务代码说明,查看时请忽略业务代码;
public class SheetService {
@Autowired
MongoTemplate mongoTemplate;
public void newSheet(SheetInfoPo sheetInfoPo) {
String sheetId = SnowflakeUtil.getSnowId();
log.info("tableId:{},sheetId:{}", sheetInfoPo.getTableId(), sheetId);
sheetInfoPo.setSheetId(sheetId);
String body = JSONObject.toJSONString(sheetInfoPo);
mongoTemplate.insert(body, "sheet_basic"); //插入json字符串
}
}
说明:上面插入的是json字符串,也可以直接插入结构体,但是结构体在mongodb中存储类型就不再是文档。
四、删除数据
public void delSheet(String sheetId) {
Criteria criteria = Criteria.where("sheetId").is(sheetId);
Query query = Query.query(criteria);
mongoTemplate.remove(query, "sheet_basic");
}
说明:remove 方法是照删除满足 query 查询条件的所有数据,这里涉及的查询在后面详细讲。
五、修改数据
下述截取部分业务代码说明,查看时请忽略业务代码;
private void updateSheetInfo(SheetInfoPo sheetInfoPo) {
Criteria criteria = Criteria.where("sheetId").is(sheetInfoPo.getSheetId());
Query query = Query.query(criteria);
Update update = new Update();
String sheetName = sheetInfoPo.getSheetName();
Integer isConsume = sheetInfoPo.getIsConsume();
Integer sheetSort = sheetInfoPo.getSheetSort();
if (null != sheetName) {
update.set("sheetName", sheetName);
}
if (null != isConsume) {
update.set("isConsume", isConsume);
}
if (null != sheetSort) {
update.set("sheetSort", sheetSort);
}
if (update.getUpdateObject().isEmpty()) {
return;
}
UpdateResult result = mongoTemplate.update(query, update, "sheet_basic");
log.info("result:{},bol:{}", result, result.wasAcknowledged());
}
说明:
1.修改方法有两个,update 和 upsert,update 是修改满足查询条件的数据(查不到不修改),upsert是按照查询条件修改数据(查不到就新增)
2.Update 类是用于构建修改数据的类
六、查询数据
查询数据的构造条件是通过Criteria类实现的,Query 会把查询条件封装进来同时会提供数据的进一步加工(例如:排序、隐藏字段、显示字段)
public void getSheetFields(String sheetId) {
Criteria criteria = Criteria
.where("sheetId").is(sheetId)
.and("tableId").is("23");
Query query = Query.query(criteria);
//exclude:返回结果隐藏字段,include:返回结果包含字段
query.fields().exclude("_id");
//返回结果按 columnSort 升序排序
query.with(Sort.by(Sort.Order.asc("columnSort")));
List<JSONObject> sheetList = mongoTemplate.find(query, JSONObject.class, "sheet_column");
log.info("sheetList:{}", sheetList);
}
Criteria 支持的构造条件如下:
Criteria 条件语法 | mongodb条件语法 | 条件说明 |
---|---|---|
and | $and | 并 |
gt | $gt | 大于 |
gte | $gte | 大于等于 |
lt | $lt | 小于 |
lte | $lte | 小于等于 |
in | $in | 包含 |
nin | $nin | 不包含 |
is | $is | 等于 |
regex | $regex | 正则条件 |
另:Criteria 的andOperator(并且,同 $and)、orOperator(或者,同 $or)方法添加使用Criteria构造条件,复杂查询会用得到。