Mushroom Notes Mushroom Notes
🍄首页
  • JavaSE

    • 基础篇
    • 数据结构
    • IO流
    • Stream流
    • 函数式接口
    • JUC
    • 反射
    • 网络编程
    • 设计模式
  • JavaEE

    • Servlet
    • JDBC
    • 会话技术
    • 过滤器监听器
    • 三层架构
  • JDK

    • 总览
  • JVM

    • 总览
  • 常用mate
  • CSS
  • JavaScript
  • rds 数据库

    • MySQL
    • MySQL 进阶
    • MySQL 库表规范
  • nosql 数据库

    • Redis
    • Redis 进阶
    • Redis 底层
    • MongoDB
  • Spring生态

    • Spring
    • Spring MVC
    • Spring boot
    • Spring Validation
  • Spring Cloud生态

    • Spring Cloud
    • 服务治理
    • 远程调用
    • 网关路由
    • 服务保护
    • 分布式事务
    • 消息中间件
  • 数据库

    • Mybatis
    • Mybatis Plus
    • Elasticsearch
    • Redisson
  • 通信

    • Netty
📚技术
  • 方案专题
  • 算法专题
  • BUG专题
  • 安装专题
  • 网安专题
  • 面试专题
  • 常用网站
  • 后端常用
  • 前端常用
  • 分类
  • 标签
  • 归档

kinoko

一位兴趣使然的热心码农
🍄首页
  • JavaSE

    • 基础篇
    • 数据结构
    • IO流
    • Stream流
    • 函数式接口
    • JUC
    • 反射
    • 网络编程
    • 设计模式
  • JavaEE

    • Servlet
    • JDBC
    • 会话技术
    • 过滤器监听器
    • 三层架构
  • JDK

    • 总览
  • JVM

    • 总览
  • 常用mate
  • CSS
  • JavaScript
  • rds 数据库

    • MySQL
    • MySQL 进阶
    • MySQL 库表规范
  • nosql 数据库

    • Redis
    • Redis 进阶
    • Redis 底层
    • MongoDB
  • Spring生态

    • Spring
    • Spring MVC
    • Spring boot
    • Spring Validation
  • Spring Cloud生态

    • Spring Cloud
    • 服务治理
    • 远程调用
    • 网关路由
    • 服务保护
    • 分布式事务
    • 消息中间件
  • 数据库

    • Mybatis
    • Mybatis Plus
    • Elasticsearch
    • Redisson
  • 通信

    • Netty
📚技术
  • 方案专题
  • 算法专题
  • BUG专题
  • 安装专题
  • 网安专题
  • 面试专题
  • 常用网站
  • 后端常用
  • 前端常用
  • 分类
  • 标签
  • 归档
  • rds 数据库

  • nosql 数据库

    • Redis 基础
    • Redis 进阶
    • Redis 原理
    • MongoDB
      • 介绍
      • Linux启动MongoDB
      • Spring整合MongoDB
  • 数据库
  • nosql 数据库
kinoko
2023-12-19
目录

MongoDB

# 介绍


用户的搜索记录,需要给每一个用户都保存一份,数据量较大,要求加载速度快,通常这样的数据存储到mongodb更合适,不建议直接存储到关系型数据库中。
image.png
适合存储在MongoDB的数据:
1)海量数据
2)读写高频
3)价值相对低
电商网站数据价值比较高!   订单 ,用户数据,商品数据    丢失后果很严重!存储MySQL

资讯APP价值比较! 文章,用户,自媒体用户,素材
1)用户历史记录(搜索记录)
2)商品的评论
3)系统的公告信息
4)社交App的说说(朋友圈)

MongoDB特点:

  • 支持文本查询
  • 不需要支持事务,不存在复杂的多表查询
  • 存储数据可持久化
  • 需要TB甚至 PB 级别数据存储
  • 需求变化较快,数据模型无法确认,预计使用快速迭代开发形式
  • 需要至少2000以上的读写QPS【高性能】
  • 能支持快速水平扩展【高扩展】
  • 99.999%高可用【高可用】

# Linux启动MongoDB


1)拉取镜像

docker pull mongo
1

2)创建容器

docker run -di --name mongo -p 27017:27017 -v ~/data/mongodata:/data  mongo
1

# Spring整合MongoDB


导入依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
1
2
3
4

配置yml

spring:
  data:
    mongodb:
      host: 192.168.66.133
      port: 27017
      database: leadnews-search
1
2
3
4
5
6

demo

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SearchApplication.class)
public class MongoDBTest {
    
    @Autowired
    private MongoTemplate mongoTemplate;
    
    /**
    * 保存数据
    */
    @Test
    public void testSave(){
        Random random = new Random();
        for(int i=1;i<=5;i++){
            ApUserSearch userSearch = new ApUserSearch();
            userSearch.setKeyword("黑马"+i);
            userSearch.setCreatedTime(DateTime.now().minusMinutes(random.nextInt(10)).toDate());
            userSearch.setUserId(1002);
            //mongoTemplate.insert(userSearch); //只能用于新增数据
            mongoTemplate.save(userSearch);//既可以新增数据,也可以更新数据(存储主键值时)
        }
    }
    
    /**
    * 查询数据
    */
    @Test
    public void testQuery(){
        //单个条件
        //Query query = Query.query(Criteria.where("keyword").is("黑马5"));
        
        //多个条件   查询userId=1002,且keyword内容以"头条"开头的
        /**
        * regex(): 利用正则表达式
        */
        //Query query = Query.query(Criteria.where("userId").is(1002).and("keyword").regex("^头条.*"));
        
        //排序查询
        /* Query query = Query.query(Criteria.where("userId").is(1002).and("keyword").regex("^头条.*"));
        query.with(Sort.by(Sort.Direction.ASC,"createdTime"));//排序*/
        
        //分页显示
        Query query = Query.query(Criteria.where("userId").is(1002));
        /**
        * 参数一:页码,从0开始计算
        * 参数二:页面大小
        */
        //query.with(PageRequest.of(1,5));
        
        query.limit(5);//页面大小
        
        /**
        * find(): 可以将多条结果返回
        */
        List<ApUserSearch> searchList = mongoTemplate.find(query, ApUserSearch.class);
        searchList.forEach(System.out::println);
        /**
        * findOne(): 只能返回一条结果
        */
        //ApUserSearch userSearch = mongoTemplate.findOne(query, ApUserSearch.class);
    }
    
    /**
    * 删除数据
    */
    @Test
    public void testRemove(){
        //Query query = Query.query(Criteria.where("_id").is("625e17179c850748db466ee4"));
        Query query = Query.query(Criteria.where("userId").is(1003));
        mongoTemplate.remove(query,ApUserSearch.class);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#mongodb#json数据库
上次更新: 2023/12/29 11:32:56
Redis 原理

← Redis 原理

最近更新
01
JVM 底层
09-13
02
JVM 理论
09-13
03
JVM 应用
09-13
更多文章>
Theme by Vdoing | Copyright © 2022-2024 kinoko | MIT License | 粤ICP备2024165634号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式