• MongoDB实践


    MongoDB学习

    MongoDB简介

    MongoDB 是一种流行的文档型 NoSQL 数据库,它具有以下特点和应用场景:

    文档型数据库:MongoDB 使用 BSON(Binary JSON)格式的文档来存储数据。每个文档可以具有不同的字段,这使得数据模型非常灵活。

    横向扩展:MongoDB 具有良好的横向扩展性,能够轻松应对大规模数据和高吞吐量的需求。

    查询语言:MongoDB 提供强大的查询语言,支持丰富的查询操作,包括嵌套查询、数组查询和地理空间查询。

    复制和故障转移:MongoDB 支持数据复制和自动故障转移,提供高可用性和数据冗余。

    地理位置数据:MongoDB 提供用于地理位置数据的内置支持,适用于地理信息系统(GIS)应用。

    适用场景:MongoDB 适用于大数据、实时分析、内容管理系统、日志记录、物联网(IoT)等非结构化或半结构化数据应用。

    Redis简介

    Redis(Remote Dictionary Server)是另一种非常流行的 NoSQL 数据存储系统,但它与 MongoDB 有一些重要的区别:

    数据模型:Redis 是一个键值存储数据库,用于存储键值对,其中值可以是字符串、列表、集合、哈希表等。MongoDB 是文档型数据库,数据以文档的形式存储,具有更复杂的结构。

    持久性:Redis 的默认配置通常不是持久性的,而 MongoDB 提供了更强大的数据持久性支持。

    查询语言:Redis 不提供类似 SQL 的查询语言,数据操作通常是基于键的。MongoDB 提供了更强大的查询语言和过滤条件。

    数据大小:Redis 通常用于缓存和快速数据检索,不适合存储大型文档或大数据集。MongoDB 更适合大型数据存储。

    Redis与MongoDB两者区别总结

    总结而言,Redis 和 MongoDB 针对不同的用例和数据模型而设计。它们通常不是互相替代的,而是用于不同的数据存储需求。Redis 适用于缓存、会话存储、消息队列等场景,而 MongoDB 适用于存储非结构化或半结构化的大型文档数据。根据您的项目需求,您可以选择使用其中一个或两者结合来满足不同的数据存储需求。

    MySQL和MongoDB对比

    在这里插入图片描述

    MongoDB实践

    我的文件位置:C:\Demos\mongodb\mongodbStudy\mongodbSource\MongoDB\mongodb-win32-x86_64-2008plus-ssl-4.0.12\mongodb-win32-x86_64-2008plus-ssl-4.0.12
    解压mongodb文件夹,新建data和config文件夹
    在这里插入图片描述
    在config文件下,新建一个mongod.conf
    在这里插入图片描述

    storage:
     #The directory where the mongod instance stores its data.Default Value is "/data/db" on Windows.
     dbPath: C:\Demos\mongodb\mongodbStudy\mongodbSource\MongoDB\mongodb-win32-x86_64-2008plus-ssl-4.0.12\mongodb-win32-x86_64-2008plus-ssl-4.0.12\data
    
    • 1
    • 2
    • 3

    桌面建一个1.bat,写一个脚本启动mongoDB,下面就是我的mongodb的地址,进入bin目录启动

    cd /d C:\Demos\资料-mongodb基础到进阶\01_MongoDB用起来-快速上手\04_资源\MongoDB软件\mongodb-win32-x86_64-2008plus-ssl-4.0.12\mongodb-win32-x86_64-2008plus-ssl-4.0.12\bin
    start mongod -f ..\config\mongod.conf
    
    • 1
    • 2

    可视化工具

    在这里插入图片描述

    使用MongoDB

    1、 连接到 MongoDB 数据库:

    使用 MongoDB 的客户端(如官方的 MongoDB Shell 或 MongoDB Compass)连接到数据库,或者在应用程序中使用适当的库连接到数据库。

    2、创建数据库:

    创建数据库:
    在 MongoDB 中,数据库是按需创建的,不需要显式创建数据库。要切换到特定数据库或使用特定数据库,可以使用以下命令:

    use mycollection
    
    • 1

    这将切换到名为 “mycollection” 的数据库,如果不存在,MongoDB 将自动创建它。

    插入文档:
    插入文档使用 insert 命令或 insertOne 和 insertMany 方法。

    db.mycollection.insert({ name: "John", age: 30 })
    
    • 1

    查询文档:
    查询文档使用 find 命令。

    db.mycollection.find({ name: "John" })
    
    • 1

    更新文档:
    更新文档使用 update 命令或 updateOne 和 updateMany 方法。

    db.mycollection.update({ name: "John" }, { $set: { age: 31 } })
    
    • 1

    删除文档:
    删除文档使用 remove 命令或 deleteOne 和 deleteMany 方法。

    db.mycollection.remove({ name: "John" })
    
    • 1

    Spring Boot 整合 MongoDB:

    在 Spring Boot 中,您可以使用 Spring Data MongoDB 来轻松地进行数据库操作。以下是一个示例,演示如何在 Spring Boot 项目中整合 MongoDB:

    添加依赖:
    首先,您需要在项目的 pom.xml 文件中添加 Spring Data MongoDB 的依赖:

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-mongodbartifactId>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    配置 MongoDB 连接:

    spring:
      #数据源配置
      data:
        mongodb:
          # 主机地址
          host: localhost
          # 数据库
          database: articledb
          # 默认端口是27017
          port: 27017
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    创建实体类:
    创建与文档对应的实体类,使用 @Document 注解指定集合名。

    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Document(collection = "mycollection")
    public class MyDocument {
        @Id
        private String id;
        private String name;
        private int age;
        // Getters and setters
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    创建 Repository:
    创建一个继承自 MongoRepository 的接口,用于进行 CRUD 操作。

    import org.springframework.data.mongodb.repository.MongoRepository;
    
    public interface MyDocumentRepository extends MongoRepository<MyDocument, String> {
        List<MyDocument> findByName(String name);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用 Repository 进行操作:
    在服务类或控制器中,注入 MyDocumentRepository 并使用它进行数据库操作。

    @Service
    public class MyService {
        @Autowired
        private MyDocumentRepository repository;
    
        public MyDocument saveDocument(MyDocument document) {
            return repository.save(document);
        }
    
        public List<MyDocument> findDocumentsByName(String name) {
            return repository.findByName(name);
        }
    
        // 其他操作
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这就是在 Spring Boot 中整合 MongoDB 的基本步骤。您可以使用自动生成的 Repository 接口轻松进行 CRUD 操作,并利用 Spring Data MongoDB 的强大功能来处理数据访问。
    对于高级一点的模板,

        @Autowired
        private MongoTemplate mongoTemplate;
        public void updateCommentLikenum(String id){
    
            //  查询条件
            Query query = Query.query(Criteria.where("_id").is(id));
            //  更新条件
            Update update = new Update();
            update.inc("likenum");
            mongoTemplate.updateFirst(query,update,Comment.class);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    面试题

    当面试关于MongoDB的问题时,通常会涵盖以下主题:

    MongoDB基础知识:

    什么是MongoDB?它与传统关系数据库的不同之处是什么?
    什么是文档数据库?MongoDB中的文档是如何组织的?

    MongoDB是一个开源文档数据库,它采用BSON格式(二进制JSON)来存储数据,而不是传统的表格。
    MongoDB是一个面向文档的数据库,文档是JSON样式的数据对象,可以包含嵌套字段。

    数据建模:

    如何设计MongoDB的文档模式?
    何时使用嵌套文档而不是引用其他文档?

    设计MongoDB的文档模式需要考虑数据的访问模式,避免过度规范化。
    嵌套文档适用于包含嵌套结构的数据,而引用文档适用于大型数据集合。
    查询和索引:

    查询和索引:

    如何执行查询操作?
    什么是索引,为什么它们在MongoDB中很重要?
    如何创建和管理索引?

    查询使用find方法,支持各种条件查询,如等于、不等于、大于、小于等。
    索引是数据库性能的关键,可以加速查询操作,使用createIndex来创建索引。

    聚合框架:

    什么是MongoDB的聚合框架?
    如何执行数据聚合操作?

    MongoDB的聚合框架允许执行复杂的数据聚合操作,如分组、筛选和投影。
    使用聚合管道将多个操作串联在一起以生成结果。

    复制和故障容忍:

    MongoDB如何实现数据复制和故障容忍?
    什么是主从复制和副本集?

    MongoDB通过副本集实现数据复制和故障容忍,每个副本集包含一个主节点和多个从节点。
    主从复制用于故障切换和数据冗余。

    分片:

    什么是分片,为什么需要分片?
    如何设置MongoDB分片集群?

    分片是MongoDB的扩展性解决方案,允许处理大规模数据集。
    分片集群将数据分成块并分布到多个服务器上

    安全性:

    MongoDB的安全性措施是什么?
    如何设置访问控制和身份验证?

    MongoDB提供身份验证和授权机制,可以设置访问控制,如用户名/密码、角色和权限。
    安全性还可以通过TLS/SSL加密来加强。

    性能调优:

    如何优化MongoDB查询性能?
    什么是慢查询和如何解决它们?

    优化性能包括创建合适的索引、使用投影来减小返回数据的大小,以及使用适当的查询策略。
    使用explain来分析查询性能。

    工具和生态系统:

    有哪些MongoDB相关的工具和第三方库?

    MongoDB有大量工具,如MongoDB Compass(官方GUI工具)、Mongoose(Node.js库)等。
    社区和第三方库提供了各种扩展和插件。
    数据导入和导出:

    数据导入和导出:

    如何将数据导入和导出MongoDB?

    MongoDB提供mongoimport和mongoexport工具来导入和导出数据。
    还可以使用mongodump和mongorestore备份和还原整个数据库。

  • 相关阅读:
    C++知识点总结(22):模拟算法
    【SpringBoot】| Thymeleaf 模板引擎
    Array.from(new Set)去重 与Array.map()
    Cygwin安装
    投资组合优化的人工蜂群算法(Matlab代码实现)
    FPGA实现千兆/百兆自适应以太网UDP传输
    Mybatis面试题
    这部分查找用的是哈希表吗?
    橙河网络:国外答题问卷赚钱可靠吗?
    Spring Boot 常见面试题
  • 原文地址:https://blog.csdn.net/weixin_43914278/article/details/133762756