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库学习(二) 【开源库学习】…...
电力需求预测挑战赛笔记 Task3 #Datawhale AI 夏令营
上文: 电力需求预测挑战赛笔记 Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读80次。【代码】电力需求预测挑战赛笔记 Task2。https://blog.csdn.net/qq_23311271/article/details/140360632 前面我们介绍了如何使用经验模型以及常见的lightgbm决策树模型来解决…...
Promise 详解(原理篇)
目录 什么是 Promise 实现一个 Promise Promise 的声明 解决基本状态 添加 then 方法 解决异步实现 解决链式调用 完成 resolvePromise 函数 解决其他问题 添加 catch 方法 添加 finally 方法 添加 resolve、reject、race、all 等方法 如何验证我们的 Promise 是否…...
动态内存经典笔试题分析
目录 1.题目一 2.题目二 3.题目三 4.题目四 1.题目一 #include<stdlib.h> #include<stdio.h> #include<string.h> void GetMemory(char* p) {p (char*)malloc(100); } void Test(void) {char* str NULL;GetMemory(str);strcpy(str, "hello world…...
JS设计模式(一)单例模式
注释很详细,直接上代码 本文建立在已有JS面向对象基础的前提下,若无,请移步以下博客先行了解 JS面向对象(一)类与对象写法 特点和用途: 全局访问点:通过单例模式可以在整个应用程序中访问同一个…...
uniapp动态计算并设置元素高度
<template><view><scroll-view id"sv-box" :scroll-y"true" :style"{height:navHeightpx}"></scroll-view><view id"btn-box"><button>取消</button><button>确认</button><…...
直播架构如何设计核心节点和边缘节点
在直播架构中,核心节点和边缘节点的分工及主要服务是确保直播服务稳定、高效和可扩展的关键。以下是对这些节点的详细描述: 核心节点 核心节点通常位于数据中心,负责处理直播的主要逻辑和数据处理。其主要服务包括: 直播管理后…...
自动驾驶-预测概览
通过生成一条路径来预测一个物体的行为,在每一个时间段内,为每一辆汽车重新计算预测他们新生成的路径,这些预测路径为规划阶段做出决策提供了必要信息 预测路径有实时性的要求,预测模块能够学习新的行为。我们可以使用多源的数据…...
基于PSO算法优化PID参数的一些问题
目录 前言 Q1:惯性权重ω如何设置比较好?学习因子C1和C2如何设置? Q2:迭代速度边界设定一定能够遍历(/覆盖)整个PID参数二维空间范围吗?还是说需要与迭代次数相关?迭代次数越高&a…...
什么是决策树?
1. 什么是决策树? 决策树(Decision Tree)是一种常用的机器学习算法,用于解决分类和回归问题。它通过构建树结构来表示决策过程,分支节点表示特征选择,叶节点表示类别或回归值。 2. 决策树的组成部分 决策…...
ASP 快速参考
ASP 快速参考 概述 ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于动态网页设计和开发。它允许开发者创建和运行动态交互性网页,如访问数据库、发送电子邮件等。ASP页面通常以.asp为文件扩展名,并…...
web开发工具下载/佛山网站优化
关注头条号,私信回复资料会有意外惊喜呦………………最后一张照片有资料。不管是参加Kaggle比赛,还是开发一个深度学习应用,第一步总是数据分析。这篇文章介绍了8个使用Python进行数据分析的方法,不仅能够提升运行效率,…...
做网站的日文/广州seo公司如何
/***小奔数据生成器 请仔细阅读下方提示! 生成数据共有4步 ! 请严格按照指示操作! ***/#include <stdio.h> #include <algorithm> #include <stdlib.h> #include <time.h> #include <string.h> #include <c…...
阿里云网站怎么做阿里妈妈/企业培训体系搭建
一、App启动优化1.App的启动可以分为2种冷启动(Cold Launch):从零开始启动APP热启动(Warm Launch):APP已经在内存中,在后台存活着,再次点击图标启动APPAPP启动时间的优化,主要是针对冷启动进行优化通过添加环境变量可以打印出APP的启动时间分…...
中国科技成就的例子/阿里巴巴seo排名优化
这是第一个类:publicclassStudents{//定义身高属性floatheight;}这是第二个类:publicclassHeight{publicfloatgetAvgHeight(Students[]stu){floatavgHeight0;floatall0;//所有学生身...这是第一个类:public class Students {//定义身高属性float height;}这是第二个类:public c…...
wordpress 两个导航/深圳seo优化服务
ColorPicker一款仿Photoshop取色器的Android版取色器。前言上一篇已经简单介绍了ColorPicker的核心自定义控件ColorPickerView的绘制流程。接下来我们详细解析一下ColorPickerView的监听事件相关代码。注:初始颜色传入在讲颜色改变监听之前,先来讲讲初始…...
网站如何调用手机淘宝做淘宝客/免费seo视频教学
大家好,我是多选参数的一员 —— 大炮。这里先剧透一下,在一段时间后,多选参数会搞一个抽奖福利,其中是有《可读代码编写的艺术》以及其他书籍(可能还有别的) 的福利。可以先关注「 多选参数 」,以方便第一时间参与抽奖…...