MongoDB的基本使用

news2025/1/22 9:18:09

MongoDB的引出

使用Redis技术可以有效的提高数据访问速度,但是由于Redis的数据格式单一性,无法操作结构化数据,当操作对象型的数据时,Redis就显得捉襟见肘。在保障访问速度的情况下,如果想操作结构化数据,看来Redis无法满足要求了,此时需要使用全新的数据存储结束来解决此问题,即MongoDB技术。

MongoDB简介

  1. MongoDB是一个开源、高性能、无模式文档型数据库,它是NoSQL数据库产品中的一种,是最像关系型数据库的非关系型数据库。

    • 无模式:简单说就是作为一款数据库,没有固定的数据存储结构,第一条数据可能有A、B、C一共3个字段,第二条数据可能有D、E、F也是3个字段,第三条数据可能是A、C、E3个字段,也就是说数据的结构不固定,这就是无模式
  2. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

    • bson:是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。它是一种二进制表示形式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。BSON之名缘于JSON,含义为Binary JSON(二进制JSON)

MongoDB常见应用场景

  1. MongoDB一般都会和数据库结合使用,永久性存储与临时存储相结合,适用于修改次数较多的数据使用。
    • 游戏装备数据、游戏道具数据
      • 存储位置:数据库、Mongodb
      • 特征:永久性存储与临时存储相结合、修改频度较高
    • 直播数据、打赏数据、粉丝数据
      • 存储位置:数据库、Mongodb
      • 特征:永久性存储与临时存储相结合,修改频度极高
    • 物联网数据
      • 存储位置:Mongodb
      • 特征:临时存储,修改频度飞速

MongoDB的下载

  1. windows版安装包下载地址:https://www.mongodb.com/try/download

    • 下载的安装包也有两种形式,一种是一键安装的msi文件,还有一种是解压缩就能使用的zip文件,哪种形式都行
  2. zip解压:

      1. 把压缩文件放置一个目录下,然后解压缩完毕后会得到如下文件,其中bin目录包含了所有mongodb的可执行命令
        在这里插入图片描述
      1. mongodb在运行时需要指定一个数据存储的目录,所以创建一个数据存储目录,通常放置在安装目录中,此处创建data的目录用来存储数据,然后在data目录里面再创建一个db目录,用来存储mongodb运行时产生(呈现)的数据文件。具体如下:
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
      1. 启动服务器:进入bin目录里面,然后在该目录下输入cmd进入命令行,然后执行下面的命令。
mongod --dbpath=..\data\db

在这里插入图片描述
在这里插入图片描述
启动服务器时需要指定数据存储位置,通过参数–dbpath进行设置,可以根据需要自行设置数据存储路径。默认服务端口27017。

***然后启动客户端:***进入bin目录里面,然后在该目录下输入cmd进入命令行,然后执行下面的命令,就可以操作mongo数据库了。

mongo --host=127.0.0.1 --port=27017

--host 和--port都是默认的数据。

在这里插入图片描述

  1. MongoDB虽然是一款数据库,但是它的操作并不是使用SQL语句进行的,因此操作方式比较陌生,为此我们一般使用一些类似于Navicat的数据库客户端软件,能够便捷的操作MongoDB,先安装一个客户端,再来操作MongoDB。
    • 这里介绍使用Robot3t,Robot3t是一款绿色软件,无需安装,解压缩即可。解压缩完毕后进入安装目录双击robot3t.exe即可使用。
      在这里插入图片描述
      注意,使用mongodb客户端软件之前,记得启动mongodb服务器。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      创建数据库:在左侧菜单中使用右键创建,输入数据库名称即可
      在这里插入图片描述
      在这里插入图片描述
      创建集合:在Collections上使用右键创建,输入集合名称即可,集合等同于数据库中的表的作用
      在这里插入图片描述
      在这里插入图片描述

mongodb数据库操作

显示所有的数据库:show dbs、show databases
显示当前所在的数据库:db
选择和创建数据库:use 数据库名称
删除当前数据库:db.dropDatabase()

mongodb集合操作

  1. 新增集合:

    • 显示新增:db.createCollection(name)
    • 隐式新增:通过插入文档数据来默认创建,db.collection.insert({id:1,name:knife});
  2. 显示数据库中所有的集合:show tables、show collections

  3. 删除当前集合:db.collection.drop()

    • 清空一个集合(效率低,直接删集合更快):db.collection.remove({})

mongodb文档操作(文档是一种类似json格式的数据,初学者可以先把数据理解为就是json数据)

  1. 新增文档:
新增一个文档:
	db.集合名称.insert/save/insertOne(文档) ;   => 单文档插入
	db.collection.insertMany(文档):  =>多文档插入
	db.collection.insert(文档):   =>单、多文档插入
	
例子:db.collection.insert({k1:v1,k2:v2, ......})
db.knife.insertOne({id:1,name:"jack",city:"广州",age:20})
	集合名称:knife
	文档:{id:1,name:"jack",city:"广州",age:20}


在这里插入图片描述

  1. 删除文档:
db.集合名称.remove(条件)

例子:deleteOne删除id=2的文档
db.knife.deleteOne({id:2})
  1. 修改文档:
db.集合名称.update(条件,{操作种类:{文档}})
  1. 查询文档:
基础查询:
	查询全部:		   db.集合.find();
	查第一条:		   db.集合.findOne()
	查询指定数量文档:	db.集合.find().limit(10)					//查10条文档
	跳过指定数量文档:	db.集合.find().skip(20)					//跳过20条文档
	统计:			  	db.集合.count()
	排序:				db.集合.sort({age:1})						//按age升序排序
	投影:				db.集合名称.find(条件,{name:1,age:1})		 //仅保留name与age域





条件查询:
	基本格式:			db.集合.find({条件})
	模糊查询:			db.集合.find({域名:/正则表达式/})		  //等同SQL中的like,比like强大,可以执行正则所有规则
	条件比较运算:		   db.集合.find({域名:{$gt:值}})				//等同SQL中的数值比较操作,例如:name>18
	包含查询:			db.集合.find({域名:{$in:[值1,值2]}})		//等同于SQL中的in
	条件连接查询:		   db.集合.find({$and:[{条件1},{条件2}]})	   //等同于SQL中的and、or

springboot整合mongodb

  1. 使用springboot整合MongDB该如何进行呢?其实springboot为什么使用的开发者这么多,就是因为他的套路几乎完全一样。导入坐标,做配置,使用API接口操作。整合Redis如此,整合MongoDB同样如此。(熟悉的的三板斧)
    • 第一,先导入对应技术的整合starter坐标
    • 第二,配置必要信息
    • 第三,使用提供的API(接口啊,类啊等等的)操作即可

​下面就开始springboot整合MongoDB,操作步骤如下:
步骤①:导入springboot整合MongoDB的starter坐标

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

上述坐标也可以在创建模块的时候通过勾选的形式进行选择,同样归属NoSQL分类中
在这里插入图片描述
步骤②:进行基础配置

spring:
  data:
    mongodb:
      uri: mongodb://localhost/knife
# localhost是本机地址,然后后面的knife是数据库名称
# 如果这里配置的数据库名称是不存在的,那么它在使用的时候,会默认帮你创建这个数据库。

​操作MongoDB需要的配置与操作redis一样,最基本的信息都是操作哪一台服务器,区别就是连接的服务器IP地址和端口不同,书写格式不同而已。

步骤③:使用springboot整合MongoDB的专用客户端接口MongoTemplate来进行操作(这里只是调用MongoTemplate两个比较简单的方法)

@SpringBootTest
class SpringbootMongodbApplicationTests {
    @Autowired
    private MongoTemplate mongoTemplate;
    @Test
    void contextLoads() {
        Book book = new Book();
        book.setId(2);
        book.setName("springboot2");
        book.setType("springboot2");
        book.setDescription("springboot2");
//向数据里面添加一个文档(可以理解为mysql里面添加一条数据)
        mongoTemplate.save(book);
    }
    @Test
    void find(){
    //查询方法
        List<Book> all = mongoTemplate.findAll(Book.class);
        System.out.println(all);
    }
}

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

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

相关文章

【操作系统】存储器管理

目录 4.1 存储器的层次结构 4.1.1 多级存储结构 4.1. 2 可执行存储器 4.1.3 高速缓存和磁盘缓存 4.2 程序的装入和链接 4.2.1 程序的装入 4.2.2 程序的链接 1.静态链接(Static Linking)方式 (1) 对相对地址进行修改。 (2) 变换外部调用符号。 2. 装入时动态链接(Load-t…

2013年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

“一元复始&#xff0c;万象更新。行而不辍&#xff0c;未来可期。” 努力学习和奋斗的时光总是过得飞快&#xff0c;不知不觉&#xff0c;2024年已经悄然而至&#xff0c;今天是2024年1月1日&#xff0c;六分成长祝所有的读者朋友和孩子们新年快乐&#xff01;学习进步&#…

使用python快速开发与PDF文档对话的Gemini聊天机器人

检索增强生成(Retrieval-augmented generation&#xff0c;RAG)使得我们可以让大型语言模型(LLMs)访问外部知识库数据(如pdf,word、text等)&#xff0c;从而让人们可以更加方便的通过LLM来学习外部数据的知识。今天我们将利用之前学习到的RAG方法&#xff0c;谷歌Gemini模型和l…

实验3 vTPM相关

一、实验目的 1.了解vTPM原理和相关知识&#xff1b;2.创建具备vTPM的虚拟机&#xff1b;3.加深对可信计算技术的理解。 二、实验内容 安装seabios&#xff0c;libtpms&#xff0c;swtpm&#xff0c;qemu‐tpm&#xff1b;启动vTPM&#xff1b;安装虚拟机。 三、实验环境 …

单片机的存储、堆栈与程序执行方式

一、单片机存储区域 如图所示位STM32F103ZET6的参数&#xff1a; 单片机的ROM&#xff08;内部FLASH&#xff09;&#xff1a;512KB&#xff0c;用来存放程序代码的空间。 单片机的RAM&#xff1a;64KB&#xff0c;一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

CSDN - 从CSDN下载自己上传的资源要下载码, 自己无法下载

从CSDN下载自己上传的资源要下载码, 自己无法下载 概述 程序里面要用一个参数文件的加解密类, 想到自己以前上传到csdn有demo. 就去下载自己上传的demo. 无法下载, 需要下载码. 也不知道这下载码怎么获得? 按照提示去关注CSDN官方的号, 关注了之后没啥反应, 应该是以前关注过…

「漏洞复现」Everlab-Catalog经销商管理后台文件上传

漏洞描述 Everlab 云端实验室是北京库巴扎信息科技有限公司为科研类用户量身打造的一款功能完备的信息化交流与管理平台,致力于科研数据及科研工作的规范有序。为实验室的信息化管理提供“一站式”解决方案。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪…

pytest --collectonly 收集测试案例

pytest --collectonly 是一条命令行指令&#xff0c;用于在运行 pytest 测试时仅收集测试项而不执行它们。它会显示出所有可用的测试项列表&#xff0c;包括测试模块、测试类和测试函数&#xff0c;但不会执行任何实际的测试代码。 这个命令对于查看项目中的测试结构和确保所有…

CentOS:docker同一容器间通信

docker同一容器中不同服务以别名访问 1、创建bridge网络 docker network create testnet 2、查看Docker网络 docker network ls 3、运行容器连接到testnet网络 使用方法&#xff1a;docker run -it --name <容器名> —network --network-alias <网络别名> <…

华为交换机生成树STP配置案例

企业内部网络怎么防止网络出现环路&#xff1f;学会STP生成树技术就可以解决啦。 STP简介 在二层交换网络中&#xff0c;一旦存在环路就会造成报文在环路内不断循环和增生&#xff0c;产生广播风暴&#xff0c;从而占用所有的有效带宽&#xff0c;使网络变得无法正常通信。 在…

【模拟电路】基础理论与实际应用

一、毫安时和毫瓦时 二、开关电路 三、继电器 四、半导体 五、二极管 六、三极管 七、三极管应用案例 一、毫安时和毫瓦时 毫安时&#xff08;mAh&#xff09;和毫瓦时&#xff08;mWh&#xff09;是两个不同的物理量&#xff0c;它们分别表示电量和能量的度量单位。下面的图…

基于EPICS modbus模块的单通道电压监测项目

先介绍在本项目中使用到的硬件&#xff1a; 1&#xff09;开发板&#xff1a;为香橙派Zero2&#xff0c;安装系统如下&#xff1a; Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy 2&#xff09; USB转485模块&…

【网络面试(6)】IP协议对网络包的转发

在前面的博客中&#xff0c;我们提到过&#xff0c;网络传输的报文是有真实的数据包和一些头部组成&#xff0c;目前我们了解的头部就有TCP头、IP头、MAC头&#xff0c;而且这三个头部信息都是在应用程序委托给协议栈之后&#xff0c;被写入的相关信息&#xff0c;这些头部都是…

香橙派5plus从ssd启动Ubuntu

官方接口图 我实际会用到的就几个接口&#xff0c;背面的话就一个M.2固态的位置&#xff1a; 其中WIFI模块的接口应该也可以插2230的固态&#xff0c;不过是pcie2.0的速度&#xff0c;背面的接口则是pcie3.0*4的速度&#xff0c;差距还是挺大的。 开始安装系统 准备工作 一张…

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷③

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第3套&#xff09; 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第3套&#xff09; 模块…

【Redis-10】Redis集群的实现原理和实践

Redis集群是Redis提供的分布式数据库方案&#xff0c;通过分片来进行数据共享&#xff0c;实现复制和故障转移的功能。 1. Redis集群节点 一个Redis集群由多个节点组成&#xff0c;多个节点可以通过命令实现连接&#xff0c;由独立状态转为集群状态&#xff0c;命令是cluster …

论文解读:Coordinate Attention for Efficient Mobile Network Design(CVPR2021)

论文前言 原理其实很简单&#xff0c;但是论文作者说得很抽象&#xff0c;时间紧的建议直接看3.1中原理简述CBMA、原理简述CBMA以及3.2中原理简述coordinate attention block即可。 Abstract 最近关于mobile network设计的研究已经证明了通道注意(例如&#xff0c;the Squee…

7.java——异常

异常——error&#xff08;资源耗尽&#xff0c;JVM内部系统错误&#xff0c;代码一般处理不了&#xff09;和excption&#xff08;数组越界&#xff0c;空指针访问&#xff0c;代码可以处理&#xff09; java.lang.Throwable;异常体系的根父类 -------java.lang.Error:错误。…

20231231_小米音箱接入GPT

参考资料&#xff1a; GitHub - yihong0618/xiaogpt: Play ChatGPT and other LLM with Xiaomi AI Speaker *.设置运行脚本权限 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned *.配置小米音箱 ()pip install miservice_fork -i https://pypi.tuna.tsinghua.edu.cn/sim…

如何设置Android Studio绘制布局时的视图--新手建议收藏!

目录 前言 一、总体步骤 二、详细步骤 三、总结 四、更多资源 前言 在Android Studio中&#xff0c;你可以使用布局编辑器来绘制应用程序的用户界面。布局编辑器提供了一个可视化界面&#xff0c;可让你以所见即所得的方式布局和设计应用程序的视图。 一、总体步骤 打开…