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.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
 
可视化工具

使用MongoDB
1、 连接到 MongoDB 数据库:
使用 MongoDB 的客户端(如官方的 MongoDB Shell 或 MongoDB Compass)连接到数据库,或者在应用程序中使用适当的库连接到数据库。
2、创建数据库:
创建数据库:
 在 MongoDB 中,数据库是按需创建的,不需要显式创建数据库。要切换到特定数据库或使用特定数据库,可以使用以下命令:
use mycollection
 
这将切换到名为 “mycollection” 的数据库,如果不存在,MongoDB 将自动创建它。
插入文档:
 插入文档使用 insert 命令或 insertOne 和 insertMany 方法。
db.mycollection.insert({ name: "John", age: 30 })
 
查询文档:
 查询文档使用 find 命令。
db.mycollection.find({ name: "John" })
 
更新文档:
 更新文档使用 update 命令或 updateOne 和 updateMany 方法。
db.mycollection.update({ name: "John" }, { $set: { age: 31 } })
 
删除文档:
 删除文档使用 remove 命令或 deleteOne 和 deleteMany 方法。
db.mycollection.remove({ name: "John" })
 
Spring Boot 整合 MongoDB:
在 Spring Boot 中,您可以使用 Spring Data MongoDB 来轻松地进行数据库操作。以下是一个示例,演示如何在 Spring Boot 项目中整合 MongoDB:
添加依赖:
 首先,您需要在项目的 pom.xml 文件中添加 Spring Data MongoDB 的依赖:
<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>
 
配置 MongoDB 连接:
spring:
  #数据源配置
  data:
    mongodb:
      # 主机地址
      host: localhost
      # 数据库
      database: articledb
      # 默认端口是27017
      port: 27017
 
创建实体类:
 创建与文档对应的实体类,使用 @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
}
 
创建 Repository:
 创建一个继承自 MongoRepository 的接口,用于进行 CRUD 操作。
import org.springframework.data.mongodb.repository.MongoRepository;
public interface MyDocumentRepository extends MongoRepository<MyDocument, String> {
    List<MyDocument> findByName(String name);
}
 
使用 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);
    }
    // 其他操作
}
 
这就是在 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);
    }
                












![2023年中国自动化微生物样本处理系统竞争现状及行业市场规模分析[图]](https://img-blog.csdnimg.cn/img_convert/8a992190ec65e1fdaf8ba53927d8de0f.png)





