MongoDB的介绍和使用

目录

一、MongoDB介绍

二、MongoDB相关概念

三、MongoDB的下载和安装

四、SpringBoot 整合 MongoDB


一、MongoDB介绍

MongoDB是一种NoSQL数据库管理系统,采用面向文档的数据库模型。它以C++语言编写,旨在满足大规模数据存储和高性能读写操作的需求。MongoDB的特点如下:

1. 面向文档的数据模型:MongoDB使用类似JSON的BSON(Binary JSON)格式存储数据,数据以文档的形式组织,每个文档可以包含不同的字段,文档的结构可以根据需要灵活变化。

2. 高性能:MongoDB具有高性能的读写操作,支持索引和复制等特性,能够满足大规模数据存储和高并发访问的需求。

3. 灵活的数据模式:MongoDB不需要预先定义数据模式,文档的结构可以根据应用程序的需求动态调整,这使得MongoDB非常适合快速迭代和开发敏捷的应用程序。

4. 强大的查询语言:MongoDB支持丰富的查询操作,包括条件查询、范围查询、正则表达式查询等,同时还支持聚合操作、地理空间查询等高级功能。

5. 高可用性和可扩展性:MongoDB支持自动分片和副本集等功能,可以实现数据的水平扩展和容错处理,保证了系统的高可用性和可扩展性。

6. 开源和社区支持:MongoDB是开源软件,拥有庞大的社区支持和活跃的开发者社区,提供了丰富的文档和教程,方便开发者学习和使用。

MongoDB适用于许多场景,特别是需要处理半结构化数据、需要高可扩展性和灵活性的应用程序,例如Web应用程序、社交媒体应用程序、物联网应用程序等。

总的来说,MongoDB是一种功能强大、灵活性高、性能优异的NoSQL数据库,广泛应用于各种大规模数据存储和实时数据处理场景。

二、MongoDB相关概念

MongoDB是一个面向文档的NoSQL数据库管理系统,其核心概念包括以下几个方面:

  1. 文档(Document):
    ○ MongoDB中的基本数据单元是文档,文档是一个键值对(key-value)的数据结构,类似于JSON对象。
    ○ 文档可以包含多个字段,每个字段都有一个唯一的键(key)和对应的值(value)。
    ○ 文档的值可以是基本数据类型(如字符串、数字、布尔值等),也可以是嵌套的文档、数组或其他复杂类型。
  2. 集合(Collection):
    ○ MongoDB中的集合类似于关系型数据库中的表,是一组文档的容器。
    ○ 集合不要求文档具有相同的结构,因此可以存储各种不同结构的文档。
    ○ MongoDB中的文档是动态模式的,可以根据需要随时添加新的字段或修改文档结构。
  3. 数据库(Database):
    ○ MongoDB中的数据库是集合的容器,每个数据库包含多个集合。
    ○ 一个MongoDB服务器可以包含多个数据库,每个数据库都有独立的权限控制和存储引擎配置。
  4. 索引(Index):
    ○ MongoDB支持在集合中创建索引,以提高查询性能和加速数据检索。
    ○ 索引可以基于单个字段或多个字段,支持多种类型的索引(如唯一索引、文本索引、地理空间索引等)。
  5. 副本集(Replica Set):
    ○ MongoDB中的副本集是一组多个MongoDB实例的集合,用于提供数据冗余和高可用性。
    ○ 副本集中的每个实例都是一个成员,其中一个成员被选举为主节点(Primary),其他成员是从节点(Secondary)。
    ○ 主节点负责处理所有写操作,从节点复制主节点的数据,并在主节点发生故障时自动切换成为新的主节点。
  6. 分片(Sharding):
    ○ MongoDB支持分片功能,可以将数据水平划分为多个分片(Shard)存储在不同的服务器上。
    ○ 分片可以提高数据存储的横向扩展性和性能。
    ○ MongoDB使用分片键将数据分发到不同的分片上,并通过分片群集(Shard Cluster)来管理分片的自动迁移和负载均衡。
  7. 查询语言和操作:
    ○ MongoDB提供了丰富的查询语言和操作,包括条件查询、投影、排序、聚合、地理空间查询等。
    ○ MongoDB查询语言使用类似于JavaScript的语法,支持嵌套文档、数组和正则表达式等高级特性。
  8. 事务(Transactions):
    ○ MongoDB从版本4.0开始支持多文档事务,允许在一个或多个集合中执行多个操作,并保持操作的原子性和一致性。
    以上是MongoDB的一些核心概念,理解这些概念对于使用MongoDB进行数据存储和操作非常重要。

三、MongoDB的下载和安装

下载和安装MongoDB非常简单,下面是基本的步骤:

  1. 下载MongoDB:
    ○ 访问MongoDB官方网站(Download MongoDB Community Server | MongoDB)下载页面。

○ 在下载页面找到适用于你操作系统的MongoDB版本,通常有Windows、macOS和Linux等版本可供选择。
○ 点击下载按钮下载安装包,选择适用于你操作系统的版本。

  1. 安装MongoDB:
    ○ 对于Windows系统:
    ■ 下载后的安装程序为.msi文件,双击运行安装程序。
    ■ 跟随安装向导指示进行安装。可以选择安装MongoDB Compass(官方提供的图形界面管理工具)等组件。
    ■ 完成安装后,MongoDB会默认安装到C:\Program Files\MongoDB目录下。
    ○ 对于macOS系统:
    ■ 下载后的安装文件为.dmg文件,双击运行安装程序。
    ■ 将MongoDB图标拖拽到Applications文件夹中,即完成安装。
    ○ 对于Linux系统:
    ■ 下载后的安装文件为.tgz文件,使用命令行解压缩文件。
    ■ 进入解压后的目录,将MongoDB文件夹移动到合适的位置,例如/usr/local/mongodb。
    ■ 设置PATH环境变量,使得可以在任意目录下执行MongoDB命令。
  2. 配置MongoDB:
    ○ MongoDB默认会在/data/db目录下创建数据存储文件,如果需要修改数据存储路径,可以通过配置文件进行设置。
    ○ 可以根据需要修改MongoDB的配置文件mongod.conf,例如修改端口号、启用认证、配置副本集等。
  3. 启动MongoDB:
    ○ 对于Windows系统,可以通过在命令行中运行mongod命令来启动MongoDB。
    ○ 对于macOS和Linux系统,可以在命令行中运行mongod命令来启动MongoDB。
  4. 连接MongoDB:
    ○ MongoDB启动后,默认监听27017端口,可以使用MongoDB提供的客户端命令行工具mongo连接到MongoDB服务器。
    ○ 在命令行中输入mongo命令,即可连接到本地MongoDB服务器。
    安装完成后,你就可以使用MongoDB进行数据库的操作了。在实际开发中,你可能还需要学习一些MongoDB的基本命令和操作,以便管理数据库和执行数据操作。

四、SpringBoot 整合 MongoDB

要在Spring Boot项目中整合MongoDB,你需要遵循以下步骤:

步骤 1:添加MongoDB依赖

在你的Spring Boot项目中,首先需要在pom.xml文件中添加MongoDB的依赖。通常,你可以通过添加Spring Boot提供的spring-boot-starter-data-mongodb依赖来简化整合过程。

xmlCopy code
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

这个依赖将包含Spring Data MongoDB以及MongoDB Java驱动。

步骤 2:配置MongoDB连接信息

在application.properties(或application.yml)文件中添加MongoDB的连接信息,包括数据库的主机地址、端口号、数据库名称等。

propertiesCopy code
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydatabase

步骤 3:创建实体类

在Spring Boot项目中创建用于映射MongoDB文档的实体类。这些实体类可以使用@Document注解标记,并且每个字段可以使用JPA注解进行标记。

javaCopy code
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "users")
public class User {
    
    @Id
    private String id;
    
    private String name;
    private int age;
    
    // 省略构造函数、getter和setter
}

步骤 4:创建MongoDB仓库接口

创建一个继承自MongoRepository接口的MongoDB仓库接口,用于执行CRUD操作。

javaCopy code
import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserRepository extends MongoRepository<User, String> {
    // 可以自定义需要的查询方法
}

步骤 5:编写业务逻辑

在需要使用MongoDB的地方编写业务逻辑,可以通过自动注入UserRepository来执行对MongoDB的操作。

javaCopy code
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserService {
    
    @Autowired
    private UserRepository userRepository;
    
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
    
    // 其他业务方法...
}

参考链接:全面学习MongoDB,在Spring Boot项目中整合 MongoDB-阿里云开发者社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/402584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何将 .NET Aspire 应用程序部署到 Azure Container App

作者&#xff1a;Jiachen Jiang 排版&#xff1a;Alan Wang 最近发布的用于构建云原生应用程序的 .NET Aspire 与 Azure Container App&#xff08;ACA&#xff09;非常匹配。.NET Aspire 旨在轻松管理由一系列相互依赖的微服务组成的应用程序。Azure Container App 专为微服务…

Vue样式绑定

1. 绑定 HTML class ①通过class名称的bool值判断样式是否被启用 <template><!--通过样式名称是否显示控制样式--><div :class"{ haveBorder: p.isBorder, haveBackground-color: p.isBackgroundcolor }">此处是样式展示区域</div><br /…

消息队列MQ 保证消息不丢失(消息可靠性)

文章目录 概述RabbitMQ 怎么避免消息丢失&#xff08;可靠传输&#xff09;RocketMQ 怎么确保消息不丢失Kafka 怎么保证消息不丢失activeMQ 怎么避免消息丢失MQ 宕机了消息是否会丢失线上服务宕机时&#xff0c;如何保证数据100%不丢失吗&#xff1f;消息队列消息持久化 概述 …

猫头虎分享已解决Bug || SyntaxError: Unexpected token < in JSON at position 0

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Docker本地部署Rss订阅工具并实现公网远程访问

文章目录 1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 Rsshub是一个开源、简单易用、易于扩展的RSS生成器&#xff0c;它可以为各种内容生成RSS订阅源。 Rsshub借助于开源社…

一.CMake的工具安装包的下载

下载 cmake工具 进入cmake官网下载cmake&#xff1a;Download CMake 可以选择最新的Windows x64 installer 的包&#xff08;下载需要科学上网&#xff09;

nginx之web性能location优先级

4.2 event事件 events {worker_connections 65536; #设置单个工作进程的最大并发连接数use epoll;#使用epoll事件驱动&#xff0c;Nginx支持众多的事件驱动&#xff0c;比如:select、poll、epoll&#xff0c;只能设置在events模块中设置。accept_mutex on; #on为同一时刻一个…

【刷题】牛客 JZ64 求1+2+3+...+n

刷题 题目描述思路一 &#xff08;暴力递归版&#xff09;思路二 &#xff08;妙用内存版&#xff09;思路三 &#xff08;快速乘法版&#xff09;思路四 &#xff08;构造巧解版&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01…

Flutter 3.19.0 版本新特性

其实在每个版本的更新中呢&#xff0c;都会合并很多很多的这个合并请求、还有开发建议&#xff0c;那么本版本的也不例外&#xff0c;社区官方发布的公告是合并了168个社区成员的1429个拉请求。 当然&#xff0c;如果你的时间允许的话&#xff0c;你可以去查看一下这些请求&am…

Linux篇:进程

一. 前置知识 1.1冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 为什么计算机要采用冯诺依曼体系呢&#xff1f; 在计算机出现之前有很多人都提出过计算机体系结构&#xff0c;但最…

linux 网络服务小实验

实验图和要求&#xff1a; 1&#xff09;网关服务器&#xff1a;ens36&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.44.254/24&#xff1b;Server1&#xff1a;192.168.44.20/24&#xff1b;PC1和Server2&#xff1a;自动获取IP&#xff1b;交换机无需配置。…

仿慕课网html+css+js特效

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 文件目录内容图片部分代码下载路径 文件目录 –css ----index –images –js ----index.js ----jquery.…

MySQL 查询遇到Illegal mix of collations的错误

业务同学线上业务执行 SQL 时报错&#xff0c; ### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,COERCIBLE) for operation like含义是对like操作非法混合了排序规则(utf8mb4_ge…

汉诺塔问题—java详解(附源码)

来源及应用 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标&#xff1a;把A杆上的金盘全部移到C杆上&#xff0c;并仍…

【人工智能学习思维脉络导图】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 知识图谱1. 基础知识2.人工智能核心概念3.实践与应用4.持续学习与进展5.挑战与自我提升6.人脉网络 知识图谱 人工智能学习思维脉络导图 1. 基础知识 计算机科学基础数学基础&#xff08;线性代数、微积分、概率论和统计学…

PNG图片压缩-UPNG.js参数说明及示例

UPNG.js是一个非常轻量且高效的库&#xff0c;用于处理PNG图像。它可以编码和解码PNG图片&#xff0c;同时支持压缩和解压缩功能。特别适合在前端项目中处理图像&#xff0c;尤其是在需要优化图像大小而不牺牲质量时。 UPNG.encode()函数是UPNG.js中用于将图像数据编码成PNG格…

第三十九天| 62.不同路径、63. 不同路径 II

Leetcode 62.不同路径 题目链接&#xff1a;62 不同路径 题干&#xff1a;一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “…

Android进阶(二十九) 走近 IntentFilter

文章目录 一、什么是IntentFilter &#xff1f;二、IntentFilter 如何过滤隐式意图&#xff1f;2.1 动作测试2.2 类别测试2.3 数据测试 一、什么是IntentFilter &#xff1f; 如果一个 Intent 请求在一片数据上执行一个动作&#xff0c; Android 如何知道哪个应用程序&#xf…

三维测量技术及应用

接触式测量&#xff08;Contact Measurement&#xff09;&#xff1a; 坐标测量机&#xff08;CMM, Coordinate Measuring Machine&#xff09;&#xff1a;通过探针直接接触物体表面获取三维坐标数据。优点是精度高&#xff0c;但速度慢&#xff0c;对软质材料测量效果不佳&am…

JavaScript 设计模式之享元模式

享元 将一部分共用的方法提取出来作为公用的模块 const Car {getName: function () {return this.name},getPrice: function (price) {return price * 30} }const BMW function (name, price) {this.name namethis.price price } BMW.prototype Car const bmw new BMW(…