SpringBoot引入mongdb
目录
一、导入依赖
二、mongdb常用操作
1.使用数据库
2.在集合中插入数据
3.查询表中的数据
(1)无条件查看表数据
默认显示前20条
指定需要查看的记录数
遍历打印所有的记录
查找第21-40条记录
统计数量
(2)按条件查询
查找id为1的记录
4.更新一条记录
5.删除一条记录
6.删除集合
7.创建索引
8.查看看数据库,查看集合
三、配置文件及实体类的配置方法
MongoDB 是一个开源的、基于分布式文件存储的 NoSQL 数据库。它属于文档型数据库的一种,以其灵活的数据模型和高性能而著称。MongoDB 使用 BSON(Binary JSON)格式存储数据,这种格式允许存储复杂的数据结构,如嵌套的对象和数组。
MongoDB 存储的数据是文档形式的,通常使用 BSON 格式。每个文档相当于关系型数据库中的一行记录通过内存映射文件技术,内置的索引支持使得查询速度非常快。
mongdb的安装
本项目采用docker进行安装
#拉取镜像
docker pull mongo:4.0.3
#创建容器
docker create --name mongodb --restart=always -p 27017:27017 -v mongodb:/data/db mongo:4.0.3
#启动容器
docker start mongodb
#进入容器
docker exec -it mongodb /bin/bash
#使用MongoDB客户端进行操作
mongo
show dbs #查询所有的数据库
一、导入依赖
<!--MongoDB相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.9.1</version>
</dependency>
<!--其他工具包依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
二、mongdb常用操作
1.使用数据库
切换到数据库tanhua,不需要提前创建
user tanhua
2.在集合中插入数据
不需要提前创建集合,插入后会自动创建集合
db.recommend_user.insert({"userId":2,"toUserId":1,"score":77,"date":"2019/1/1"})
3.查询表中的数据
(1)无条件查看表数据
默认显示前20条
db.recoomend_user.find({})
如果还想查看下一条 it
如果要连续显示多条记录 it(10)
指定需要查看的记录数
查看recommend_user集合的前50条记录
db.recommend_user.find({}).limit(50)
遍历打印所有的记录
db.recommend_user.find({}).forEach(printjson)
查找第21-40条记录
db.recommend_user.find({}).skip(20).limit(20)
统计数量
db.recommend_user.countDocuments({})
(2)按条件查询
查找id为1的记录
db.recommend_user.find({ "userId": 1 })
4.更新一条记录
db.recommend_user.updateOne(
{ "userId": 99 },
{ $set: { "score": 80 } }
)
5.删除一条记录
db.recommend_user.deleteOne({ "userId": 99 })
6.删除集合
db.recommend_user.drop()
7.创建索引
toUserId:正序,score:倒序
db.recommend_user.createIndex({'toUserId':1,'score':-1})
8.查看看数据库,查看集合
show dbs #查看数据库
#查看集合(表)
show collections
show table
三、配置文件及实体类的配置方法
配置文件
spring:
data:
mongodb:
uri: mongodb://localhost:27017/tanhua # MongoDB数据库的连接URI,包含数据库地址和数据库名
实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "recommend_user") //指定集合的名称
public class RecommendUser implements Serializable {
private static final long serialVersionUID = -4296017160071130962L;
@Id
private ObjectId id; //主键id
@Indexed
private Long userId; //推荐的用户id
private Long toUserId; //用户id
@Indexed
private Double score; //推荐得分
private String date; //日期
}
四、方法
按条件查询后(查找toUserId=userId的记录),降序(按照score字段降序),查找一条记录(findOne)
public RecommendUser queryWithMaxScore(Long userId) {
// 条件
Criteria criteria = Criteria.where("toUserId").is(userId);
// 按照得分倒序排序,获取第一条数据
Query query = Query.query(criteria).with(Sort.by(Sort.Order.desc("score"))).limit(1);
return this.mongoTemplate.findOne(query, RecommendUser.class);
}
分页查询
pageNum - 1
是因为 PageRequest
的页码是从 0 开始的,而通常前端传入的页码是从 1 开始的。Sort.by(Sort.Order.desc("score"))
表示按 score
字段降序排序。
public PageInfo<RecommendUser> queryPageInfo(Long userId, Integer pageNum, Integer pageSize) {
// 条件
Criteria criteria = Criteria.where("toUserId").is(userId);
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, Sort.by(Sort.Order.desc("score")));
Query query = Query.query(criteria).with(pageable);
List<RecommendUser> recommendUsers = this.mongoTemplate.find(query, RecommendUser.class);
// 说明:数据总条数,暂时不提供,如果需要的话再提供
return new PageInfo<>(0, pageNum, pageSize, recommendUsers);
}
分页查询,返回值的封装
@Data
@AllArgsConstructor
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = -2105385689859184204L;
/**
* 总条数
*/
private Integer total;
/**
* 当前页
*/
private Integer pageNum;
/**
* 一页显示的大小
*/
private Integer pageSize;
/**
* 数据列表
*/
private List<T> records = Collections.emptyList();
}