当前位置: 首页 > 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; 【开源库学习】…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

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

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