MongoDB快速上手(包会用)

MongoDB快速上手(包会用)

MongoDB 介绍 🐱‍💻

MongoDB 是一个开源的 文档型数据库,它使用类似 JSON 的 BSON(二进制 JSON)格式来存储数据,具有高性能、可扩展性和灵活性。它适用于各种应用程序,特别是在需要处理大量数据和快速发展的应用场景下。

image-20250201210830480

特点 🌟

  • 灵活的数据模型 🧩
    MongoDB 使用文档而不是表来存储数据,支持多种数据类型,便于存储复杂的嵌套数据结构。文档格式是 BSON(一种二进制格式的 JSON),支持存储数组、对象和其他嵌套结构。

  • 水平扩展 📈
    MongoDB 支持通过 分片进行水平扩展,可以在多个机器上分布数据,提升数据存储和查询的性能。

  • 高可用性 🔄
    通过 副本集,MongoDB 提供高可用性保障。如果某个节点失效,副本集中的其他节点可以继续提供服务,确保数据不会丢失。

  • 强大的查询语言 💬
    MongoDB 提供丰富的查询功能,支持类似 SQL 的查询语法,支持聚合、过滤、排序等操作。还可以结合索引优化查询性能。

  • 自动化管理 🔧
    MongoDB 提供了自动化备份、自动数据恢复、自动分片和自动故障切换等功能,使得管理大规模数据变得更容易。

适用场景 🏙️

MongoDB 是一个非常适合需要快速开发和灵活架构的应用程序的数据库,特别适用于以下场景:

  • 实时数据分析 📊
  • 内容管理系统📰
  • 社交网络 🌐
  • 物联网数据存储 📡
  • 大数据应用 📦

🚀 推荐阅读

  • MongoDB 官方文档

MongoDB 6.0 安装 ——Ubuntu 22.04🚀

参考:https://dblab.xmu.edu.cn/blog/4594/

一、更新 Ubuntu 22.04 软件包 📦

在 Ubuntu 22.04 系统中,首先运行系统更新命令,以重建从现有仓库创建的 APT 软件包缓存。给定的命令还将更新系统中安装的软件包。

sudo apt-get update

接着,安装一些必要的软件包:

sudo apt-get install gnupg curl

二、添加 GPG 密钥 🔑

需要添加 GPG 密钥,系统将需要该密钥来验证我们将要安装的 MongoDB 软件包的真实性。使用以下命令添加 GPG 密钥:

curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /etc/apt/trusted.gpg.d/mongodb-server-6.0.gpg --dearmor

三、添加 MongoDB 6.0 仓库 🗂️

由于 MongoDB 不能通过 Ubuntu 22.04 的默认仓库直接安装,我们需要手动添加 MongoDB 6.0 版本的仓库。执行以下命令:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

添加仓库后,更新 APT 索引缓存:

sudo apt-get update

四、安装 libssl1.1 🔐

MongoDB 的安装需要依赖 libssl1.1 库,可以使用以下命令安装:

echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
sudo apt-get update
sudo apt-get install libssl1.1

五、安装 MongoDB 6.0 🛠️

现在,系统已经准备好安装 MongoDB 服务器及其其他工具(如 mongosh)。运行以下命令来安装 MongoDB:

sudo apt-get install mongodb-org

在安装过程中,会出现提示,输入 Y 进行确认。

六、启动 MongoDB 服务 🚀

启动 MongoDB 服务,并检查其状态,确保 MongoDB 正在运行:

sudo systemctl start mongod
sudo systemctl status mongod

image-20250201211659147

七、进入 MongoDB Shell 🐱‍💻

在另一个终端窗口,使用以下命令进入 MongoDB Shell 交互式执行环境:

mongosh

image-20250201211721079

在 MongoDB Shell 中,你可以输入 MongoDB 命令进行交互式操作。

要退出 MongoDB Shell,可以使用以下命令:

test> exit

MongoDB 远程连接配置笔记 🌍

默认情况下,MongoDB 只允许本地连接(即来自 127.0.0.1localhost 的连接)。为了允许远程机器访问 MongoDB 数据库,我们需要进行一些配置更改。本文将介绍如何在 MongoDB 中开启远程连接。

一、修改 MongoDB 配置文件 📝

1. 打开 MongoDB 配置文件

MongoDB 的配置文件通常位于 /etc/mongod.conf。使用文本编辑器打开该配置文件:

sudo vim /etc/mongod.conf
2. 修改 bindIp 设置

在配置文件中,找到 net 部分:

net:port: 27017bindIp: 127.0.0.1

bindIp 设置为 0.0.0.0,这表示 MongoDB 将接受来自所有 IP 地址的连接。如果你只想允许特定 IP 地址连接,可以将 bindIp 设置为该 IP(例如,bindIp: 127.0.0.1,<your-ip>)。

net:port: 27017bindIp: 0.0.0.0  # 允许所有远程连接

image-20250201212138923

3. 启用认证(如果需要)

为了增强安全性,建议启用认证,防止未经授权的访问。找到 security 部分,并确保 authorization 设置为 enabled

security:authorization: "enabled"

image-20250201212210058

二、允许防火墙访问 MongoDB 端口 🔐

MongoDB 默认使用端口 27017,如果服务器启用了防火墙,需要打开该端口以允许远程连接。

使用 UFW(Ubuntu 防火墙)

如果你使用的是 UFW 防火墙,可以运行以下命令允许 MongoDB 端口:

sudo ufw allow 27017

image-20250201212234706

三、重启 MongoDB 服务 🔄

修改配置文件后,需要重启 MongoDB 服务以应用更改:

sudo systemctl restart mongod

四、创建管理员用户(如果尚未创建) 👤

如果你尚未创建管理员用户,并且已启用认证,必须创建一个具有足够权限的用户才能进行远程连接。

1. 连接到 MongoDB shell

连接到本地 MongoDB 实例(如果你启用了认证,则需要使用管理员账户):

mongo
2. 切换到 admin 数据库并创建管理员用户

在 MongoDB shell 中,切换到 admin 数据库并创建一个管理员用户:

use admin
db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]
})
3. 启用认证

在配置文件中启用了认证后,MongoDB 将要求使用正确的用户名和密码进行身份验证。

五、通过远程客户端连接 MongoDB 🌐

在远程机器上,可以使用 MongoDB 客户端工具(如 mongomongosh)连接到 MongoDB 实例。通过以下命令连接:

mongo --host <your-server-ip> --port 27017 -u "admin" -p "your-password" --authenticationDatabase "admin"

小技巧:可以直接在linux服务器上用域名连接,如果连通了,那在远程调用的时候也一定是可以跑通的

Spring Boot MongoDB 集成📚

一、引入依赖 🔗

要在 Spring Boot 项目中使用 MongoDB,需要在 pom.xml 中添加 MongoDB 相关的依赖。

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

二、配置 MongoDB 连接 🛠️

application.ymlapplication.properties 中配置 MongoDB 连接信息。以下是 application.yml 的配置示例:

spring:data:mongodb:host: xxxxxxxxx       # MongoDB 的主机地址port: 27017           # MongoDB 端口号database: comment     # 默认连接的数据库auto-index-creation: true  # 自动创建索引authenticationDatabase: admin  # 认证数据库username: admin        # MongoDB 的用户名password: 050218      # MongoDB 的密码

三、MongoTemplate 使用示例 📄

MongoTemplate 是 Spring Data MongoDB 提供的核心类,用于执行 MongoDB 操作(如查询、插入、更新等)。

1. CommentService 接口

public interface CommentService {void addComment(Comment comment);  // 添加评论List<Comment> getAllComments();    // 获取所有评论List<Comment> getCommentsByAgendaId(String agendaId);  // 根据议程ID查询评论List<Comment> getCommentsByUserId(String userId);      // 根据用户ID查询评论List<Comment> getCommentsByAgendaIdOrderByCreatedAt(String agendaId);  // 根据议程ID查询并按创建时间排序
}

2. CommentServiceImpl 实现类

@Service
public class CommentServiceImpl implements CommentService {@Resourceprivate MongoTemplate mongoTemplate;@Overridepublic void addComment(Comment comment) {mongoTemplate.insert(comment);  // 插入新评论}@Overridepublic List<Comment> getAllComments() {return mongoTemplate.findAll(Comment.class);  // 查询所有评论}@Overridepublic List<Comment> getCommentsByAgendaId(String agendaId) {Query query = new Query();query.addCriteria(Criteria.where("agendaId").is(agendaId));  // 根据 agendaId 查询return mongoTemplate.find(query, Comment.class);}@Overridepublic List<Comment> getCommentsByUserId(String userId) {Query query = new Query();query.addCriteria(Criteria.where("userId").is(userId));  // 根据 userId 查询return mongoTemplate.find(query, Comment.class);}@Overridepublic List<Comment> getCommentsByAgendaIdOrderByCreatedAt(String agendaId) {Query query = new Query();query.addCriteria(Criteria.where("agendaId").is(agendaId));  // 根据 agendaId 查询query.with(Sort.by(Sort.Direction.DESC, "createdAt"));  // 按 createdAt 字段降序排序if (mongoTemplate.exists(query, Comment.class)) {return mongoTemplate.find(query, Comment.class);  // 返回符合条件的评论列表}return null;  // 如果没有找到符合条件的评论,返回 null}
}

3. Comment 实体类

@Document(collection = "comment")  // MongoDB 集合名称
@Data
public class Comment {@Id  // MongoDB 中的主键字段private String id;private String userId;      // 用户IDprivate String agendaId;    // 议程IDprivate String context;     // 评论内容private LocalDateTime createdAt;  // 评论创建时间
}

四、常见操作 💡

1. 插入数据

addComment() 方法中,我们使用 mongoTemplate.insert(comment) 将新的评论插入到 MongoDB 中。

2. 查询数据

使用 mongoTemplate.find() 方法来查询数据。可以通过 QueryCriteria 来构建查询条件。

  • findAll():查询所有文档。
  • find():根据查询条件查询特定文档。
  • exists():检查是否存在符合条件的文档。

3. 排序

通过 query.with(Sort.by(Sort.Direction.DESC, "createdAt")) 对查询结果进行排序,这里我们按 createdAt 字段降序排序。

五、启动与测试 🚀

确保你已经正确配置了 MongoDB,并且 MongoDB 服务已经启动。然后,你可以使用 Spring Boot 启动项目,通过 REST API 或直接调用服务方法来测试 MongoDB 操作。

  • 使用 @Service 注解将 CommentServiceImpl 类标记为服务类。
  • 在控制器层(Controller)或其他地方调用 CommentService 的方法来进行数据操作。

示例:调用 getCommentsByAgendaIdOrderByCreatedAt

@RestController
@RequestMapping("/comments")
public class CommentController {@Autowiredprivate CommentService commentService;@GetMapping("/agenda/{agendaId}")public List<Comment> getCommentsByAgendaId(@PathVariable String agendaId) {return commentService.getCommentsByAgendaIdOrderByCreatedAt(agendaId);}
}

image-20250201212839986

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STC32通用GPIO中断,库函数配置方式 AI8051U和STC32G已测试没有问题

近来STC的单片机已经出到32位了&#xff0c;并且个人自己打板测试了几个型号&#xff0c;相比之前的51完全不是一个量级&#xff0c;可以通过以下这张图片中的信息来感受一下如今的32位8051单片机的强大&#xff0c;也是很很期待25年的这一新作了&#xff01; 配图为AI8052U或…

使用Pygame制作“Flappy Bird”游戏

1. 前言 Flappy Bird 是一款“点击上浮、松手下落”的横向卷轴游戏&#xff1a; 场景中持续出现上下成对的管道&#xff0c;玩家需要让小鸟在管道之间穿行&#xff1b;每穿过一对管道记 1 分&#xff1b;若小鸟碰到管道或掉到地面&#xff0c;则游戏结束&#xff1b;一旦上手…

java求职学习day23

MySQL 单表 & 约束 & 事务 1. DQL操作单表 1.1 创建数据库,复制表 1) 创建一个新的数据库 db2 CREATE DATABASE db2 CHARACTER SET utf8; 2) 将 db1 数据库中的 emp 表 复制到当前 db2 数据库 1.2 排序 通过 ORDER BY 子句 , 可以将查询出的结果进行排序 ( 排序只…

markdown公式特殊字符

个人学习笔记 根号 在 Markdown 中&#xff0c;要表示根号 3&#xff0c;可以使用 LaTeX 语法来实现。常见的有以下两种方式&#xff1a; 行内公式形式&#xff1a;使用一对美元符号 $ 将内容包裹起来&#xff0c;即 $\sqrt{3}$ &#xff0c;在支持 LaTeX 语法渲染的 Markdow…

git笔记-简单入门

git笔记 git是一个分布式版本控制系统&#xff0c;它的优点有哪些呢&#xff1f;分为以下几个部分 与集中式的版本控制系统比起来&#xff0c;不用担心单点故障问题&#xff0c;只需要互相同步一下进度即可。支持离线编辑&#xff0c;每一个人都有一个完整的版本库。跨平台支持…

系统学习算法: 专题七 递归

递归算法简而言之就是当一个大问题拆分为多个子问题时&#xff0c;如果每个子问题的操作步骤都一样&#xff0c;就可以用递归&#xff0c;其中递归在递的时候要有结束条件&#xff0c;不能一直递下去&#xff0c;结束条件后就归 这里不建议学习递归的时候抠细节&#xff0c;还…

C++中常用的十大排序方法之1——冒泡排序

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C中常用的排序方法之——冒泡排序的相关…

OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境

一、在OpenEuler上搭建Java运行环境 在OpenEuler上搭建Java运行环境可以通过以下几种常见方式&#xff0c;下面分别介绍基于包管理器安装OpenJDK和手动安装Oracle JDK的步骤。 使用包管理器安装OpenJDK OpenJDK是Java开发工具包的开源实现&#xff0c;在OpenEuler上可以方便…

【二叉搜索树】

二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种特殊的二叉树&#xff0c;它具有以下特征&#xff1a; 若它的左子树不为空&#xff0c;则…

洛谷P3372 【模板】线段树 1以及分块

【模板】线段树 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 …

Linux运维之Linux的安装和配置

目录 Linux的基本概念&#xff1a; 1.为什么要使用Linux&#xff1f; 2.什么是Linux&#xff1f; Linux的安装和配置&#xff1a; 1.下载Linux的虚拟机和镜像文件&#xff1a; 1.1下载虚拟机 1.2下载镜像文件 2.在虚拟机或者物理机中安装Linux操作系统 3.配置虚拟机的…

【ArcMap零基础训练营】01 ArcMap使用入门及绘图基础

ArcMap入门及使用技巧 230106直播录像 ArcMap使用技巧及制图入门 ArcGIS的安装 本次教学使用的ArcMap版本为10.7&#xff0c;建议各位安装ArcGIS10.0及其以上版本的英文版本。 下载及安装详细教程可参考ArcGIS 10.8 for Desktop 完整安装教程 麻辣GIS 改善使用体验的几个操作…

程序员学英文之At the Airport Customs

Dialogue-1 Making Airline Reservation预定机票 My cousin works for Xiamen Airlines. 我表哥在厦航上班。I’d like to book an air ticket. 我想预定一张机票。Don’t judge a book by its cover. 不要以貌取人。I’d like to book / re-serve a table for 10. 我想预定一…

Python 写的几个经典游戏 新年放烟花、 贪吃蛇、俄罗斯方块、超级玛丽、五子棋、蜘蛛纸牌

0、新年放烟花 import pygame import random import math# 初始化Pygame pygame.init()# 设置窗口 WIDTH 800 HEIGHT 600 screen pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("新年放烟花")# 颜色定义 BLACK (0, 0, 0) WHITE (255, 2…

Python Typing: 实战应用指南

文章目录 1. 什么是 Python Typing&#xff1f;2. 实战案例&#xff1a;构建一个用户管理系统2.1 项目描述2.2 代码实现 3. 类型检查工具&#xff1a;MyPy4. 常见的 typing 用法5. 总结 在 Python 中&#xff0c;静态类型检查越来越受到开发者的重视。typing 模块提供了一种方式…

14-8C++STL的queue容器

一、queue容器 (1)queue容器的简介 queue为队列容器&#xff0c;“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

PyCharm接入DeepSeek实现AI编程

目录 效果演示 创建API key 在PyCharm中下载CodeGPT插件 配置Continue DeepSeek 是一家专注于人工智能技术研发的公司&#xff0c;致力于开发高性能、低成本的 AI 模型。DeepSeek-V3 是 DeepSeek 公司推出的最新一代 AI 模型。其前身是 DeepSeek-V2.5&#xff0c;经过持续的…

C语言指针专题一 -- 指针基础原理

目录 1. 指针概念 地址和变量 指针 2. 指针的声明与初始化 3. 指针的使用 指针访问 指针的运算 指针与数组 指针与函数 4. 编程实例 5. 指针的常见陷阱与防御 6. 总结 1. 指针概念 地址和变量 在C语言中&#xff0c;地址和变量是两个基本但非常重要的概念。 1. 变…

【Python】已解决:ModuleNotFoundError: No module named ‘cv2’

个人简介&#xff1a;某不知名博主&#xff0c;致力于全栈领域的优质博客分享 | 用最优质的内容带来最舒适的阅读体验&#xff01;文末获取免费IT学习资料&#xff01; &#x1f345; 文末获取更多信息 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅收藏 &#x…