当前位置: 首页 > article >正文

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();

}


http://www.kler.cn/a/421901.html

相关文章:

  • CLIP模型也能处理点云信息
  • redis都有哪些用法
  • PTA--数据结构预习报告:旅游规划问题
  • 计算几何学习,第一天
  • JAVA设计模式,责任链模式
  • MySQL删除数据要谨慎
  • Linux(完善中)
  • 基于Matlab三点雨流计数法的载荷时间历程分析与循环疲劳评估
  • URDF(描述机器人模型)和SDF(Gazebo中用于描述仿真环境)
  • 前端request拦截器自定义参数时,后端允许跨域的拦截器要加上对应的自定义参数不然会引起访问跨域
  • 【安卓开发】【Android Studio】项目构建(Build)时报错:Integer Overflow
  • GoReplay工具middlware使用(python版本)
  • 云原生和数据库哪个好一些?
  • case判断年份是否为闰年
  • redis 从16db块 加到32db块
  • Goland2024.3 发布,有点东西
  • 开发一套ERP 第十弹 图片作为配置文件,本地读取图片,定时更新图片类型
  • [高等数学学习记录] 泰勒公式
  • 【Linux】vim编辑器
  • ORB-SLAM2 ----- LocalMapping::ComputeF12和ORBmatcher::CheckDistEpipolarLine