MongoDB的基本使用

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 {@Autowiredprivate MongoTemplate mongoTemplate;@Testvoid contextLoads() {Book book = new Book();book.setId(2);book.setName("springboot2");book.setType("springboot2");book.setDescription("springboot2");
//向数据里面添加一个文档(可以理解为mysql里面添加一条数据)mongoTemplate.save(book);}@Testvoid find(){//查询方法List<Book> all = mongoTemplate.findAll(Book.class);System.out.println(all);}
}

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

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

相关文章

Spark中的数据加载与保存

Apache Spark是一个强大的分布式计算框架&#xff0c;用于处理大规模数据。在Spark中&#xff0c;数据加载与保存是数据处理流程的关键步骤之一。本文将深入探讨Spark中数据加载与保存的基本概念和常见操作&#xff0c;包括加载不同数据源、保存数据到不同格式以及性能优化等方…

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…

算法逆袭之路(1)

11.29 开始跟进算法题进度! 每天刷4题左右 ,一周之内一定要是统一类型 而且一定稍作总结, 了解他们的内在思路究竟是怎样的!! 12.24 一定要每天早中晚都要复习一下 早中午每段一两道, 而且一定要是同一个类型, 不然刷起来都没有意义 12.26/27&#xff1a; 斐波那契数 爬…

B3610 [图论与代数结构 801] 无向图的块 题解

B3610 [图论与代数结构 801] 无向图的块 题解 2023 2023 2023&#xff0c;再见。 2024 2024 2024&#xff0c;你好&#xff01; 解法 其实就是统计点双连通分量的个数。需要注意的是&#xff0c;孤立点在这里不被看作块。本文使用 tarjan 算法来解决这道题。 概念明晰 时间…

机器学习:贝叶斯估计在新闻分类任务中的应用

文章摘要 随着互联网的普及和发展&#xff0c;大量的新闻信息涌入我们的生活。然而&#xff0c;这些新闻信息的质量参差不齐&#xff0c;有些甚至包含虚假或误导性的内容。因此&#xff0c;对新闻进行有效的分类和筛选&#xff0c;以便用户能够快速获取真实、有价值的信息&…

【完整思路】2023 年中国高校大数据挑战赛 赛题 B DNA 存储中的序列聚类与比对

2023 年中国高校大数据挑战赛 赛题 B DNA 存储中的序列聚类与比对 任务 1.错误率和拷贝数分析&#xff1a;分析“train_reads.txt”和“train_reference.txt”数据集中的错误率&#xff08;插入、删除、替换、链断裂&#xff09;和序列拷贝数。 2.聚类模型开发&#xff1a;开发…

Unity坦克大战开发全流程——结束场景——失败界面

结束场景——失败界面 在玩家类中重写死亡函数 在beginPanel中锁定鼠标

Redis 分布式锁总结

在一个分布式系统中,由于涉及到多个实例同时对同一个资源加锁的问题,像传统的synchronized、ReentrantLock等单进程情况加锁的api就不再适用,需要使用分布式锁来保证多服务实例之间加锁的安全性。常见的分布式锁的实现方式有zookeeper和redis等。而由于redis分布式锁相对于比…

搭建普罗米修斯Prometheus,并监控MySQL

1.简介 prometheus是一种时间序列的数据库&#xff0c;适合应用于监控以及告警&#xff0c;但是不适合100%的准确计费&#xff0c;因为采集的数据不一定很准确&#xff0c;主要是作为监控以及收集内存、CPU、硬盘的数据。 Prometheus生态系统由多个组件组成&#xff0c;其中许…

积水监测识别摄像机

积水监测识别摄像机是一种利用摄像技术来监测和识别道路、桥梁、隧道等区域积水情况的设备&#xff0c;它可以有效地提供实时的积水监测信息&#xff0c;帮助交通部门和相关单位及时采取应对措施&#xff0c;确保道路交通的畅通和人员安全。 积水监测识别摄像机通过安装在适当位…

STM32F407ZGT6定时器(学习笔记二)

STM32F407ZGT6定时器&#xff08;学习笔记一&#xff09;-CSDN博客这篇文章中已经对前三种定时器的使用进行了介绍&#xff0c;本篇文章将介绍&#xff08;1&#xff09;输入捕获之计算方波时长&#xff0c;&#xff08;2&#xff09;输入捕获之编码器模式。 高级定时器和通用定…

【深入之Java进阶篇】fastjson的反序列化漏洞(详解总结)

✔️ fastjson的反序列化漏 1️⃣典型解析2️⃣拓展知识仓1️⃣AutoType2️⃣AutoType 有何错?3️⃣ 绕过checkAutotype&#xff0c;黑客与fastjson的博弈4️⃣autoType不开启也能被攻击?5️⃣利用异常进行攻击6️⃣AutoType 安全模式? 1️⃣典型解析 当我们使用fastjson进行…

mllib可扩展学习库java api使用

mllib可扩展学习库java api是使用Apache Spark构建的机器学习库&#xff0c;包括分类&#xff0c;聚类&#xff0c;特征提取和预处理等功能。本文将从以下几个方面详细介绍如何使用mllib可扩展学习库java api。 一、数据预处理 数据预处理是机器学习的重要步骤之一&#xff0…

2023.12.28 Python高级-正则表达式

目录 re正则表达式,一种专门用来匹配目标字符串的规则 re.match(),从头匹配一个,无则none re.search(), 不从头匹配返回一个,无则none re.findall(), 不从头匹配,用list返回所有 re分组 re匹配修饰符 re贪婪非贪婪 re切割和替换 re正则表达式,一种专门用来匹配目标字符串…

linux的页缓存page cache

目录 如何查看系统的 Page Cache&#xff1f; 为什么 Linux 不把 Page Cache 称为 block cache&#xff1f; Page Cache 的优劣势 Page Cache 的优势 加快数据访问 减少 IO 次数&#xff0c;提高系统磁盘 I/O 吞吐量 Page Cache 的劣势 由于我们开发的程序要运行的话一般…

redis—List列表

目录 前言 1.常见命令 2.使用场景 前言 列表类型是用来存储多个有序的字符串&#xff0c;如图2-19所示&#xff0c;a、b、C、d、e五个元素从左到右组成 了一个有序的列表&#xff0c;列表中的每个字符串称为元素(element) &#xff0c;一个列表最多可以存储2^32 - 1 个元素…

功能开发 -- 向埃隆·马斯克学习任务分解

文章目录 马斯克的任务分解软件开发的任务分解可执行的最小单位任务小结 马斯克的任务分解 我们都知道埃隆马斯克&#xff08;Elon Musk&#xff09;&#xff0c;他既是电动汽车公司特斯拉&#xff08;Tesla&#xff09;的创始人&#xff0c;同时还创建了太空探索公司 SpaceX。…

李宏毅 自然语言处理(Voice Conversion) 笔记

前一章笔记&#xff1a;李宏毅 自然语言处理&#xff08;Speech Recognition&#xff09; 笔记 引入 什么是voice conversion&#xff1f; 输入一段声音&#xff0c;输出另一段声音&#xff0c;我们希望这两端声音&#xff1a;内容一样&#xff0c;其他方面不一样&#xff08…

[设计模式 Go实现] 创建型~建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 代码实…

每日一题——LeetCode977

方法一 个人方法&#xff1a; 以示例1为例&#xff1a;把[-4,-1,0,3,10] 中n<0的元素拆分出来&#xff0c;把他们的平方从小到大放入arr数组&#xff0c;则arr[0,1,16] ,那数组就还剩[3,10] 对于剩下的元素&#xff0c;看arr里面有没有比他们平方更小的元素先放入res数组&…