Java操作
搭建
搭建
依赖
<!--mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置文件
spring:
data:
mongodb:
host: ip
port: 端口
username: 账号
password: 密码
database: 数据库
authentication-database: admin
实体类注解
Document(collection="")
位置:实体类上
作用:声明mongdb集合名
注意:若未加 @Document ,则识别mongdb集合名为实体类名小写
Id
位置:属性上方
表明是主键,不可重复,自带索引
Field("名称")
位置:属性上方
作用:声明mongdb集合中的key名
注意:若未加 @Field("名称") ,则识别mongdb集合中的key名为实体类属性名
JsonFormat
作用:后端格式化日期后返回给前端
@JsonFormat(pattern = “yyyy-MM-dd”, timezone = “GMT+8”)
private Date birthday;//生日
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
private Date createTime;//创建时间
@JsonFormat(pattern = DateUtils.LONG_TIME_FORMAT, timezone = “GMT+8”)
private Date modifyTime;//修改时间
Transient
作用:被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。
Indexed
位置:属性上方/实体类上
作用:声明索引
唯一索引的话是@Indexed(unique = true)。
也可以对数组进行索引,如果被索引的列是数组时,MongoDB会索引这个数组中的每一个元素。
也可以对整个Document进行索引,排序是预定义的按插入BSON数据的先后升序排列
CompoundIndex
位置:实体类上
作用:声明复合索引
示例:
@CompoundIndex(name = 'age_idx', def = “{'lastName': 1, 'age': -1}”)
此索引名为age_idx,lastName和age将作为复合索引
实体类示例
banner
@Data
@Document("banner")
public class Banner {
@Id
private String _id;//mongdb的主键
private Integer bannerId;//自己定义一个主键,用于删改查,记得添加时要随机生成主键,保证唯一性
private String bannerName;//轮播图名称
private String bannerUrl;//地址
}
Template
MongoTemplate
使用
@Autowired
private MongoTemplate mongoTemplate;
增加
增加单个数据
mongoTemplate.insert(banner);
insert: 若新增数据的主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常提示主键重复,不保存当前数据
mongoTemplate.save(banner);
save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。
修改
根据自定义id修改
public void update(Banner banner) {
//org.springframework.data.mongodb.core.query.Query/Criteria/Update
Query query = new Query();
Criteria criteria = new Criteria();
// 设置查询条件
criteria.and("bannerId").is(banner.getBannerId());
query.addCriteria(criteria);
//创建Update,修改字段 例如把title修改为params.getTitle()
Update update = new Update().set("bannerName", banner.getBannerName()).set("bannerUrl", banner.getBannerUrl());
//执行修改操作,返回修改成功的条数
mongoTemplate.updateMulti(query,update,Banner.class);
}
删除
根据主键删除
public void delete(String id) {
//org.springframework.data.mongodb.core.query.Query/Criteria
Query query = new Query();
Criteria criteria = new Criteria();
// 设置查询条件
criteria.and("_id").is(id);
query.addCriteria(criteria);
mongoTemplate.remove(query, Banner.class);
}
删除集合中全部数据
public void dropCollection(String collectionName) {
// 计算表中数据的条数并删除
// 查询表数据条数
Query query = new Query();
List
<NationalPostPlatformUserVO> all = mongoTemplate.findAll(NationalPostPlatformUserVO.class);
long count = all.size();
if (count > 0) {
// 删除后,就留下表明。字段和值都删除
mongoTemplate.remove(query, NationalPostPlatformUserVO.class);
}
}
基本查询
根据自定义id查找
public Banner findById(Integer id) {
//org.springframework.data.mongodb.core.query.Query/Criteria
Query query = new Query();
Criteria criteria = new Criteria();
// 设置查询条件
criteria.and("bannerId").is(id);
query.addCriteria(criteria);
return mongoTemplate.findOne(query, Banner.class);
}
查询全部
public List
<Banner> findAll() {
return mongoTemplate.findAll(Banner.class);
}
查询总数
long totals = mongoTemplate.count(new Query(), Banner.class);
条件查询
mongoTemplate.findOne 查询一条
mongoTemplate.find查询多条
Query query = new Query();
Criteria criteria = new Criteria();
criteria.and("bannerName").is(bannerName);//条件查询
query.addCriteria(criteria);
return mongoTemplate.findOne(query, Banner.class);
分页查询
分页封装类
@Data
public class PageResult {
protected List records;
protected long total;
protected long size;
protected long current;
}
分页查询
public PageResult search(int page, int size) {
// 查询总数
long totals = mongoTemplate.count(new Query(), Banner.class);
//查询全部数据
List
<Banner> banners = mongoTemplate.findAll(Banner.class);
// 分页查询
PageResult
<Banner> bannerPage=new PageResult<>();
bannerPage.setRecords(banners);
bannerPage.setTotal(totals);
bannerPage.setSize(size);
bannerPage.setCurrent(page);
return bannerPage;
}
Criteria条件详解
详解
and() $and 并且
andOperator() $and 并且
orOperator() $or 或者
gt() $gt 大于
gte() $gte 大于等于
in() $in 是否被包含在数组或者list内
is() $is 等于
regex() $regex 正则表达式用于模式匹配,基本上是用于文档中的发现字符串 (下面有例子)
lt() $lt 小于
lte() $lte 小于等于
nin $nin
不包含