MongoDB文档整理
过往mongodb文档:
- https://blog.csdn.net/qq_46921028/article/details/123361633
- https://blog.csdn.net/qq_46921028/article/details/131136935
- https://blog.csdn.net/qq_46921028/article/details/139247847
1. MongoDB前瞻
1、MongoDB概述:

- MongoDB是一款分布式文档型数据库,底层基于C++语言编写,属于NoSQL的一种。
- MongoDB与传统的关系型数据库相比,更加简单、语法松散,结构是key-value结构。
- MySQL:数据库->表->记录。
- MongoDB:数据库->集合->文档。
- MongoDB中的文档类似JSON,结构是BSON格式(Binary JSON,二进制JSON,和 JSON 一样支持内嵌的文档对象和数组对象),每个BSON文档都可以存储不同的结构。
- MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB中的一些概念:
| RDBMS | MongoDB |
|---|---|
| 数据库 | 数据库 |
| 表 | 集合 |
| 行 | 文档 |
| 列 | 字段 |
| 表联合 | 嵌入文档 |
| 主键 | _id |

- 官网地址:https://www.mongodb.com/
- 文档地址:https://docs.mongoing.com/
- 中文社区:https://www.mongodb.org.cn/
- 仓库地址:https://github.com/mongodb/mongo
2、MongoDB:适用场景:
引入某个技术前,需要了解它的特性、适用场景以及可以解决什么问题,而不是为了技术而技术。
- MongoDB不需要去明确指定一张表的具体结构,对字段的管理非常灵活,有很强的可扩展性。
- 天生支持高并发、高可用、高可扩展性,自带数据压缩功能,支持海量数据的高效存储和访问。
- 支持基本的CRUD、数据聚合、文本搜索和地理空间查询功能。
适用于:
-
网站数据:MongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
-
高伸缩性的场景:MongoDB非常适合由数十或数百台服务器组成的数据库。
-
大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此,之前,很多时候程序员往往会选择传统的文件进行存储。
-
缓存:由于性能很高,MongoDB也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。
-
例如:弹幕、直播间互动信息、朋友圈信息、定理位置、物联网(比如 接入的设备信息、设备汇报的日志信息等)、物流(订单信息、订单状态等)场景等。
不适用场景:
- 高度事务性系统:例如银行系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程
序。 - 传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数仓可能是更合适的选择。
3、MongoDB安装:(docker方式)
#拉取镜像
docker pull mongo:7.0.0#创建宿主机上的mongodb数据目录
rm -rf /opt/mongo
mkdir -p /opt/mongo/data/db#启动容器
docker run -d --restart=always -p 27017:27017 --name mongo -v /opt/mongo/data/db:/data/db
mongo 7.0.0#进入容器,连接mongo客户端
docker exec -it mongo mongosh#基础命令
show dbs #列出所有数据库
db.version() #当前db版本
db.getMongo() #查看当前db的连接机器地址
db.help() #帮助文档
quit() #退出命令行
2. 命令操作MongoDB
2.1、数据库的操作
1、创建数据:
如果数据库不存在,会自动创建数据库,否则就切换到指定数据库。
use 库名
2、查看当前数据库:
db.getName()
3、显示当前数据库状态:
db.stats()
4、删除当前数据库:
db.dropDatabase()
5、列出所有数据库:
show dbs 或 show databases
2.2 集合的操作
1、创建集合:(一般不需要我们手动创建,添加文档时会自动创建)
db.creataCollection("集合名称/表名")
2、删除集合:
db.集合名.drop()
2.3 文档的操作
文档是一组键值(key-vlue)对。MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类
型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。
需要注意的是:MongoDB区分类型和大小写,MongoDB的文档不能有重复的键。
1、新增文档:(insert)
向User集合插入一条记录。可以预先使用createCollection方法创建集合,也可以不创建集合,直接插入数据,那么集合会被自动创建。
db.user.insert({name:'张三',age:21,sex:true})
相关文档:https://www.runoob.com/mongodb/mongodb-insert.html
2、查询文档:(query)
查询当前User集合中所有的记录:
db.user.find()
查询当前User集合中name是张三的记录:(大括号里指定查询条件,是键值对格式的)
db.User.find({name:"张三"})
相关文档:https://www.runoob.com/mongodb/mongodb-query.html
3、修改文档:(update)
只更新匹配到的第一条记录:
//修改年龄为21岁的用户姓名
db.user.update({age:21},{$set:{name:'派蒙'}})
更新匹配到的所有记录:
//加上{multi:true}表示修改多条
db.User.update({age:21},{$set:{age:99}},{multi:true})
相关文档:https://www.runoob.com/mongodb/mongodb-update.html
4、删除文档:(remove)
删除一个文档:
db.user.remove(id)
删除所有文档:
db.user.remove({})
相关文档:https://www.runoob.com/mongodb/mongodb-remove.html
3. SpringBoot操作MongoDB
spring-data是专门操作数据库的,而spring-data-mongodb是操作mongo的,它提供了两种操作mongo的方式:
- 方式1:MongoTemplate
- 方式2:MongoRepository
3.1 准备工作
1、创建SpringBoot项目,引入mongodb相关依赖:
<!--引入springboot工程并锁定版本-->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.10</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencies><!--springbootweb的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--lombok的依赖:简化实体开发--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--单元测试的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mongo的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
</dependencies><!--打包插件-->
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId></plugin></plugins>
</build>
2、配置mongodb连接信息:
spring:data:mongodb:database: testdbhost: 127.0.0.1port: 27017logging:level:root: info
3、创建实体类:
package cn.aopmin.domain;import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;/*** 用户实体类* @author 白豆五* @since 2024/7/19*/
@Data
@Document("user") //指定表名
public class User {@Idprivate String id;private String name;private Integer age;private String email;private String password;private Date createTime;
}
3.2 编写测试
import cn.aopmin.Launcher;
import cn.aopmin.domain.User;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;import java.util.Date;
import java.util.List;/*** 使用MongoTemplate操作mongo** @author 白豆五* @since 2024/7/19*/
@SpringBootTest(classes = Launcher.class)
public class MongoTemplateTest {@Autowiredprivate MongoTemplate mongoTemplate;// 添加@Testpublic void testInsert() {User user = User.builder().name("test").age(20).createTime(new Date()).build();User obj = mongoTemplate.insert(user);assert obj != null;System.out.println("添加成功");/*
NOTE:
insert() 和 save() 的区别:1. insert() 如果对象没有id, 则会自动生成id, 并插入数据库;如果对象有id, 则根据id更新对象2. save() 如果对象没有id, 则会自动生成id, 并插入数据库如果对象有id, 则会抛出异常
语法:db.user.insert({"name": "test","age": "20","createTime": ISODate("2024-07-19T09:09:09.000+08:00")});*/}// 查询所有@Testpublic void testFindAll() {List<User> userList = mongoTemplate.findAll(User.class);userList.forEach(System.out::println);}// 根据id查@Testpublic void testFindById() {User user = mongoTemplate.findById("669a36442f07de177e4f92f5", User.class);System.out.println("user = " + user);}// 条件查询@Testpublic void testCondition() {// where name = 'test' and age = 20List<User> userList = mongoTemplate.find(// 查询条件,通过Criteria对象构建Query.query(Criteria.where("name").is("test").and("age").is(20)),// 查询结果类型User.class);System.out.println("userList = " + userList);}// 分页查询@Testpublic void testPage() {// 获取第1页, 每页2条数据List<User> userList =mongoTemplate.find(// 查询条件new Query().skip(0) // 跳过前0条数据.limit(2), // 取2条数据// 查询结果类型User.class);System.out.println("userList = " + userList);}// 删除@Testpublic void testDelete() {DeleteResult result = mongoTemplate.remove(Query.query(Criteria.where("_id").is("669a36442f07de177e4f92f5")),User.class);long count = result.getDeletedCount();System.out.println("count = " + count);}// 修改@Testpublic void testUpdate() {UpdateResult result = mongoTemplate.upsert(// 查询条件Query.query(Criteria.where("name").is("test")),// 修改内容Update.update("age", 21),// 修改结果类型User.class);// 影响行数long count = result.getMatchedCount();System.out.println("count = " + count);}
}
仓库地址:https://gitee.com/aopmin/mongo-demo
相关文章:
MongoDB文档整理
过往mongodb文档: https://blog.csdn.net/qq_46921028/article/details/123361633https://blog.csdn.net/qq_46921028/article/details/131136935https://blog.csdn.net/qq_46921028/article/details/139247847 1. MongoDB前瞻 1、MongoDB概述: MongoDB是…...
【AI学习】关于Scaling Law的相关学习
一、苦涩的教训 首先,学习一段重要话语: The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. 从70年的人工智能研究中…...
学习小记-Kafka相较于其他MQ有啥优势?
Kafka 相比于 RocketMQ 有以下几个优势: 1. 高吞吐量和低延迟: Kafka 以其出色的 I/O 性能和分布式架构设计,能够实现极高的吞吐量,每秒数百万的消息处理能力,适合大规模数据流处理。同时,Kafka 设计为…...
技能 | postman接口测试工具安装及使用
哈喽小伙伴们大家好!今天来给大家分享一款轻量级,高效好用的接口测试工具-postman. Postman是一个流行的API开发工具,主要用于测试、开发和文档化API。以下是关于Postman的介绍及其主要使用场景: Postman介绍: 1. 功能丰富的API客户端&#…...
移动UI:任务中心的作用,该如何设计更合理?
任务中心是移动应用中用于展示和管理用户待办任务、提醒事项、用户福利、打卡签到等内容的功能模块。合理设计任务中心可以提升用户体验和工作效率。 以下是一些设计任务中心的合理建议: 1. 易于查看和管理: 任务中心的设计应该使用户能够快速、直观地…...
pytorch学习(十)优化函数
优化函数主要有,SGD, Adam,RMSProp这三种,并且有lr学习率,momentum动量,betas等参数需要设置。 通过这篇文章,可以学到pytorch中的优化函数的使用。 1.代码 代码参考《python深度学习-基于pytorch》&…...
Ubuntu22.04:安装Samba
1.安装Samba服务 $ sudo apt install samba samba-common 2.创建共享目录 $ mkdir /home/xxx/samba $ chmod 777 /home/xxx/samba 3.将用户加入到Samba服务中 $ sudo smbpasswd -a xxx 设置用户xxx访问Samba的密码 4.配置Samba服务 $ sudo vi /etc/samba/smb.conf 在最后加入 …...
Powershell 使用介绍
0 Preface/Foreword 0.1 参考文档 Starting Windows PowerShell - PowerShell | Microsoft Learn 1 Powershell 介绍 2 命令介绍 2.1 新建文件夹 New-Item -Path C:\GitLab-Runner -ItemType Directory 2.2 切换路径 cd C:\GitLab-Runner 2.3 下载文件 Invoke-WebRequ…...
【Langchain大语言模型开发教程】记忆
🔗 LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…...
最新Qt6的下载与成功安装详细介绍
引言 Qt6 是一款强大的跨平台应用程序开发框架,支持多种编程语言,最常用的是C。Qt6带来了许多改进和新功能,包括对C17的支持、增强的QML和UI技术、新的图形架构,以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…...
LeetCode 热题 HOT 100 (001/100)【宇宙最简单版】
【链表】 No. 0160 相交链表 【简单】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#x…...
Ubantu 使用 docker 配置 + 远程部署 + 远程开发
大家好我是苏麟 , Ubantu 一些配置 . 视频 : 服务器很贵?搞台虚拟机玩玩!保姆级 Linux 远程开发教程_哔哩哔哩_bilibili Docker安装及配置 安装命令 : sudo apt install docker.io 查看版本号 : docker -v 查看虚拟机地址命令 : ifconfig 虚拟机地址 或…...
应用层自定义协议与序列化
个人主页:Lei宝啊 愿所有美好如期而遇 协议 简单来说,就是通信双方约定好的结构化的数据。 序列化与反序列化 我们通过一个问题引入这个概念,假如我们要实现一个网络版的计算器,那么现在有两种方案,第一种&#x…...
Python学习笔记—100页Opencv详细讲解教程
目录 1 创建和显示窗口... - 4 - 2 加载显示图片... - 6 - 3 保存图片... - 7 - 4 视频采集... - 8 - 5视频录制... - 11 - 6 控制鼠标... - 12 - 7 TrackBar 控件... - 14 - 8.RGB和BGR颜色空间... - 16 - 9.HSV和HSL和YUV.. - 17 - 10 颜色空间的转化... - 18 - …...
C语言·分支和循环语句(超详细系列·全面总结)
前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下分支循环语句的知识点,我们一起来看看吧~ 目录 一、什么是语句…...
Gateway源码分析:路由Route、断言Predicate、Filter
文章目录 源码总流程图说明GateWayAutoConfigurationDispatcherHandlergetHandler()handleRequestWith()RouteToRequestUrlFilterReactiveLoadBalancerClientFilterNettyRoutingFilter 补充知识适配器模式 详细流程图 源码总流程图 在线总流程图 说明 Gateway的版本使用的是…...
ARM体系结构和接口技术(十)按键中断实验①
一、按键中断实验 (一)分析按键电路图 (二)芯片手册 二、按键中断实验分析 注:NVIC----Cortx-M核GIC----Cortx-A核 (一)查看所有外设的总线以及寄存器基地址 注:GIC的总线是A7核的…...
PostgreSQL使用(二)——插入、更新、删除数据
说明:本文介绍PostgreSQL的DML语言; 插入数据 -- 1.全字段插入,字段名可以省略 insert into tb_student values (1, 张三, 1990-01-01, 88.88);-- 2.部分字段插入,字段名必须写全 insert into tb_student (id, name) values (2,…...
有关css的题目
css样式来源有哪些? 内联样式: <a style"color: red"> </a> 内部样式:<style></style> 外部样式:写在独立的 .css文件中的 浏览器的默认样式 display有哪些属性 none - 不展示 block - 块类型…...
【开源库】libodb库编译及使用
前言 本文介绍windows平台下libodb库的编译及使用。 文末提供libodb-2.4.0编译好的msvc2019_64版本,可直接跳转自取 ODB库学习相关 【开源库学习】libodb库学习(一) 【开源库学习】libodb库学习(二) 【开源库学习】…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
