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

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

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

相关文章

华为智慧交通-高速公路视频云联网解决方案

华为高速公路视频云联网解决方案摘要&#xff1a; 智慧高速愿景智慧高速旨在实现人、车、路互信协同&#xff0c;提供更安全、高效、便捷的出行体验。通过全路段感知、全过程管控、全天候通行&#xff0c;以及智慧路段、服务区的建设&#xff0c;实现数字化、知识型、安全型、高…

[经验] 孙叔敖举于海,百里奚举于市的翻译 #学习方法#学习方法#微信

孙叔敖举于海,百里奚举于市的翻译 1、孙叔敖举于海 孙叔敖&#xff0c;春秋时期鲁国大夫&#xff0c;是古代中国的著名政治家和军事家&#xff0c;他被誉为“孔子之后”的大贤。 孙叔敖的主要贡献在于他的外交策略和军事管理能力。在他的领导下&#xff0c;鲁国积极扩张其疆…

前端学习(三)之CSS

一、什么是CSS html定义网页的结构和信息&#xff08;骨架血肉&#xff09;css定义网页的样式&#xff08;衣服&#xff09;js定义用户和网页的交互逻辑&#xff08;动作&#xff09; 通过CSS&#xff0c;可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&…

pig4cloud启动流程

环境 SpringBoot版本&#xff1a;2.7.16 SpringSecurity版本&#xff1a;5.7.11 pig4cloud版本&#xff1a;3.7.1-JDK8 流程图 概述 pig4cloud是对SpringSecurity的实现&#xff0c;其工作原理脱离不了SpringSecurity&#xff1b;pig4cloud启动首先SecurityAutoConfigurati…

9.11和9.9哪个大?

没问题 文心一言 通义千问

Puromycin(嘌呤霉素)— pac基因筛选抗生素

Puromycin是由Streptomyces alboniger&#xff08;白黑链霉菌&#xff09;产生的一种氨基糖苷类抗生素&#xff0c;可抑制原核细胞和真核细胞的肽基转移。Puromycin可抑制革兰氏阳性菌、多种动物细胞和昆虫细胞的生长&#xff0c;但是真菌和革兰氏阴性菌对Puromycin具有抗性&am…

大屏系统类优质UI风格

大屏系统类优质UI风格

C 语言回调函数

回调函数的概念 您的理解是正确的。pFunCallBack 是一种函数指针类型&#xff0c;它定义了函数的签名&#xff08;即函数的参数类型和返回类型&#xff09;。当我们说 pFunCallBack pFun&#xff0c;我们是在声明一个变量 pFun&#xff0c;其类型是 pFunCallBack —— 即一个函…

推荐4款高清稳定的远程控制软件。

远程控制软件已经在我们生活中的很多场景里都排上了用场&#xff0c;它可以帮助我们灵活办公&#xff0c;教育学习&#xff0c;游戏娱乐&#xff0c;技术支持等。如果你刚好需要远程控制设备的话&#xff0c;可以看看这4款软件&#xff0c;连接稳定高清&#xff0c;操作简单。 …

Java中的Heap(堆)(如果想知道Java中有关堆的知识点,那么只看这一篇就足够了!)

前言&#xff1a;&#xff08;Heap&#xff09;是一种特殊的完全二叉树&#xff0c;它在诸多算法中有着广泛的应用&#xff0c;本文将详细介绍Java中的堆。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本文大…

生成式人工智能落地校园与课堂的15个场景

生成式人工智能正在重塑教育行业&#xff0c;为传统教学模式带来了革命性的变化。随着AI的不断演进&#xff0c;更多令人兴奋的应用场景将逐一显现&#xff0c;为学生提供更加丰富和多元的学习体验。 尽管AI在教学中的应用越来越广泛&#xff0c;但教师们也不必担心会被完全替代…

MySQL(事务、索引)MyBatis

目录 事务 概述 四大特性&#xff08;ACID&#xff09; 索引 结构 语法 MyBatis 数据库连接池 lombok 基本操作--增删改查 根据主键删除 新增 更新 查询&#xff08;根据ID查询&#xff09; 查询&#xff08;条件查询&#xff09; XML映射文件 动态SQL 动态条…

[图解]《分析模式》漫谈16-“我用的”不能变成“我的”

1 00:00:00,720 --> 00:00:02,160 今天&#xff0c;我们来说一下 2 00:00:02,170 --> 00:00:04,850 “我用的”不能变成“我的” 3 00:00:04,860 --> 00:00:11,390 《分析模式》的前言 4 00:00:12,260 --> 00:00:13,410 有这么一句话 5 00:00:14,840 --> 0…

Windows安装go语言开发环境

一、下载安装包 安装包下载地址 下载完毕后双击进行安装。 查看是否安装成功&#xff1a; go version #查看go版本 go env #查看go环境变量正常显示则安装完成。 二、安装vscode 一般开发go语言项目使用vscode工具&#xff1a; 下载地址 下载完毕后双击进行安装。 三…

【鸿蒙学习笔记】UI・常用组件・Button・按钮组件・ButtonType

官方文档&#xff1a;按钮 (Button) 目录标题 ButtonType ButtonType 胶囊类型&#xff08;Capsule&#xff09;・圆形按钮&#xff08;Circle&#xff09;・普通按钮&#xff08;Normal&#xff09;・自定义 Column({ space: 10 }) {Text(Normal).fontSize(20).fontColor(Col…

【人工智能 | 机器学习 | 理论篇】模型评估与选择

文章目录 1. 经验误差与过拟合2. 模型评估方法2.1 模型评估概念2.2 留出法2.3 k 折交叉验证法2.4 自助法2.5 调参与最终模型 3. 性能度量3.1 均方误差3.2 错误率、精度3.3 查准率、查全率3.3 扩展3.4 ROC 与 AUC3.5 代价敏感错误率与代价曲线 4. 比较检验4.1 假设检验4.2 交叉验…

matlab中plot的一些用法

文章目录 一、基本用法二、绘制多个数据集三、设置线型、颜色四、添加标题和标签五、添加图例六、设置轴范围七、绘制网格八、 在同一图中绘制多个子图九、绘制带误差条的图十、绘制半对数图和对数图十一、绘制填充区域图十二、综合案例 一、基本用法 x 0:0.1:10; y sin(x);…

技术成神之路:设计模式(八)责任链模式

介绍 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许多个对象依次处理请求&#xff0c;避免请求的发送者和接收者之间的显式耦合。该模式通过将多个可能处理请求的对象连接成一条链&#xff0c;并沿着这条链传递请求…

Cadence23导入板框时的疑难杂症

1.为啥导入板框之后元器件找不到了呢&#xff1f; 因为导入板框的时候没有勾选 增加量 &#xff0c;导致导入的板框新建了一个文件&#xff1a; 2.导入板框之后3D显示还是不没有导入呀&#xff1f; 那是因为导入的板框还带有铜皮属性&#xff0c;需要change命令把其换为板框…

【算法】算法模板

算法模板 文章目录 算法模板简介数组字符串列表数学树图动态规划 简介 博主在LeetCode网站中学习算法的过程中使用到并总结的算法模板&#xff0c;在算法方面算是刚过初学者阶段&#xff0c;竞赛分数仅2000。 为了节省读者的宝贵时间&#xff0c;部分基础的算法与模板未列出。…