当前位置: 首页 > news >正文

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概述:

image-20240527153927622

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

MongoDB中的一些概念:

RDBMSMongoDB
数据库数据库
集合
文档
字段
表联合嵌入文档
主键_id

img

  • 官网地址: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文档&#xff1a; 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概述&#xff1a; MongoDB是…...

【AI学习】关于Scaling Law的相关学习

一、苦涩的教训 首先&#xff0c;学习一段重要话语&#xff1a; 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 有以下几个优势&#xff1a; 1. 高吞吐量和低延迟&#xff1a; Kafka 以其出色的 I/O 性能和分布式架构设计&#xff0c;能够实现极高的吞吐量&#xff0c;每秒数百万的消息处理能力&#xff0c;适合大规模数据流处理。同时&#xff0c;Kafka 设计为…...

技能 | postman接口测试工具安装及使用

哈喽小伙伴们大家好!今天来给大家分享一款轻量级,高效好用的接口测试工具-postman. Postman是一个流行的API开发工具&#xff0c;主要用于测试、开发和文档化API。以下是关于Postman的介绍及其主要使用场景&#xff1a; Postman介绍&#xff1a; 1. 功能丰富的API客户端&#…...

移动UI:任务中心的作用,该如何设计更合理?

任务中心是移动应用中用于展示和管理用户待办任务、提醒事项、用户福利、打卡签到等内容的功能模块。合理设计任务中心可以提升用户体验和工作效率。 以下是一些设计任务中心的合理建议&#xff1a; 1. 易于查看和管理&#xff1a; 任务中心的设计应该使用户能够快速、直观地…...

pytorch学习(十)优化函数

优化函数主要有&#xff0c;SGD, Adam&#xff0c;RMSProp这三种&#xff0c;并且有lr学习率&#xff0c;momentum动量&#xff0c;betas等参数需要设置。 通过这篇文章&#xff0c;可以学到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大语言模型开发教程】记忆

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…...

最新Qt6的下载与成功安装详细介绍

引言 Qt6 是一款强大的跨平台应用程序开发框架&#xff0c;支持多种编程语言&#xff0c;最常用的是C。Qt6带来了许多改进和新功能&#xff0c;包括对C17的支持、增强的QML和UI技术、新的图形架构&#xff0c;以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…...

LeetCode 热题 HOT 100 (001/100)【宇宙最简单版】

【链表】 No. 0160 相交链表 【简单】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#x…...

Ubantu 使用 docker 配置 + 远程部署 + 远程开发

大家好我是苏麟 , Ubantu 一些配置 . 视频 : 服务器很贵&#xff1f;搞台虚拟机玩玩&#xff01;保姆级 Linux 远程开发教程_哔哩哔哩_bilibili Docker安装及配置 安装命令 : sudo apt install docker.io 查看版本号 : docker -v 查看虚拟机地址命令 : ifconfig 虚拟机地址 或…...

应用层自定义协议与序列化

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 协议 简单来说&#xff0c;就是通信双方约定好的结构化的数据。 序列化与反序列化 我们通过一个问题引入这个概念&#xff0c;假如我们要实现一个网络版的计算器&#xff0c;那么现在有两种方案&#xff0c;第一种&#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语言·分支和循环语句(超详细系列·全面总结)

前言&#xff1a;Hello大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;为了更好地形成一个学习c语言的体系&#xff0c;最近将会更新关于c语言语法基础的知识&#xff0c;今天更新一下分支循环语句的知识点&#xff0c;我们一起来看看吧~ 目录 一、什么是语句&#xf…...

Gateway源码分析:路由Route、断言Predicate、Filter

文章目录 源码总流程图说明GateWayAutoConfigurationDispatcherHandlergetHandler()handleRequestWith()RouteToRequestUrlFilterReactiveLoadBalancerClientFilterNettyRoutingFilter 补充知识适配器模式 详细流程图 源码总流程图 在线总流程图 说明 Gateway的版本使用的是…...

ARM体系结构和接口技术(十)按键中断实验①

一、按键中断实验 &#xff08;一&#xff09;分析按键电路图 &#xff08;二&#xff09;芯片手册 二、按键中断实验分析 注&#xff1a;NVIC----Cortx-M核GIC----Cortx-A核 &#xff08;一&#xff09;查看所有外设的总线以及寄存器基地址 注&#xff1a;GIC的总线是A7核的…...

PostgreSQL使用(二)——插入、更新、删除数据

说明&#xff1a;本文介绍PostgreSQL的DML语言&#xff1b; 插入数据 -- 1.全字段插入&#xff0c;字段名可以省略 insert into tb_student values (1, 张三, 1990-01-01, 88.88);-- 2.部分字段插入&#xff0c;字段名必须写全 insert into tb_student (id, name) values (2,…...

有关css的题目

css样式来源有哪些&#xff1f; 内联样式&#xff1a; <a style"color: red"> </a> 内部样式&#xff1a;<style></style> 外部样式&#xff1a;写在独立的 .css文件中的 浏览器的默认样式 display有哪些属性 none - 不展示 block - 块类型…...

【开源库】libodb库编译及使用

前言 本文介绍windows平台下libodb库的编译及使用。 文末提供libodb-2.4.0编译好的msvc2019_64版本&#xff0c;可直接跳转自取 ODB库学习相关 【开源库学习】libodb库学习&#xff08;一&#xff09; 【开源库学习】libodb库学习&#xff08;二&#xff09; 【开源库学习】…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...