Mongodb入门到入土,安装到实战,外包半年学习的成果

这是我参与「第四届青训营 」笔记创作活动的的第27天,今天主要记录前端进阶必须掌握内容Mongodb数据库,从搭建环境到运行数据库,然后使用MongodB;

一、文章内容

  • 数据库基础知识
  • 关系型数据库和非关系型数据库
  • 为什么学习Mongodb数据库
  • 环境搭建及运行Mongodb
  • Mongodb命令之增删改查

二、数据库的基本知识

简单认识数据库

数据库说白了就是一个文件,不通的数据库有不同的存储方式,但最后归根结底都是一个文件存储在磁盘里,当然也有存储在内存中的数据库比如:redis,其次数据库文件都可以有多个数据库,一个数据库又可以有多个表(sql关系型数据库)或者一个数据库可以有多个集合(nosql非关系型数据库).

数据库的主要职责

数据库就是存储数据的.见名知意数据的仓库就是存放各种数据的仓库,视频、声音、图片等资源,一般关系型数据库存放的数据关联性很强,非关系型数据库存放的数据关联性较弱.

数据库主要功能
  • 增加数据
  • 删除数据
  • 更新数据
  • 查询数据

三、关系型数据库和非关系型数据库

关系型数据库有(sql):mysq/sql/ oracle/sqlite,非关系型数据库(nosql):redis / hbase /mongoDB /CouchDB.今天我们要学习的就是Mongodb.

sql和nosql的区别
  • sql存储是关系型数据,数据均有结构,但是nosql既可以存储有结构数据也可存储无结构数据,比较灵活.

  • sql是行和列组成,nosql存储是类似json数据那样.

分布式计算的优点

可靠性(容错) :
分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。

可扩展性:

在分布式计算系统可以根据需要增加更多的机器。

资源共享:

共享数据是必不可少的应用,如银行,预订系统。

灵活性:

由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。

更快的速度:

分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。

开放系统:

由于它是开放的系统,本地或者远程都可以访问到该服务。

更高的性能:

相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。

如何选择用sql还是nosql

1)数据库表schema经常变化

2)数据库表字段是复杂数据类型

3)高并发数据库请求

4)海量数据的分布式存储

1)社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。

2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。

3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将
订单所有的变更读取出来。

4)物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。

5)视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。

这些应用场景中,数据操作方面的共同特点是:

  • 数据量大
  • 写入操作频繁(读写都很频繁)
  • 价值较低的数据,对事务性要求不高
    对于这样的数据,我们更适合使用MongoDB来实现数据的存储。

应用不需要事务及复杂 join 支持
新应用,需求会变,数据模型无法确定,想快速迭代开发
应用需要2000-3000以上的读写QPS(更高也可以)
应用需要TB甚至 PB 级别数据存储
应用发展迅速,需要能快速水平扩展
应用要求存储的数据不丢失
应用需要99.999%高可用
应用需要大量的地理位置查询、文本查询
如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。

四、为什么学习Mongodb数据库

灵活高、支持并发、面向文档存储.

五、环境搭建及运行Mongodb

在官网下载对应的系统版本可以下载window也可下载linux,我下载的是linux.
下载地址:试用 MongoDB Atlas 产品|蒙戈德点击进去后选择社区版本free的,
然后在右侧选择自己的系统和版本,如图1所示.

image.png

图1 下载界面

然后打开终端在自己选定的目录下运行
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.0.tgz

下载,然后解压使用tar -zxvf mongodb-linux-x86_64-rhel70-6.0.0.tgz.
解压好之后进去mongodb-linux-x86_64-rhel70-6.0.0目录.找到bin目录进去,
创建俩个目录一个是data存放数据库,一个log存放日志执行下面的命令开启mongo服务

./mongod --dbpath 创建好的data目录绝对路径 --logpath 创建log文件夹绝对路径/mongod.log --bind_ip=0.0.0. --fork

bind_ip=0.0.0.0远程也可以链接.
fork是后台运行mongodb服务,没有报错说明成功开启,然后输入./mongo进入数据库,在这里可以随便操作数据库了.也可以算简单的加减法.

六、Mongodb命令之增删改查

使用mongodb不需要创建表格而是需要创建集合,其实集合也不需要我们创建,直接俄操作就好,不存在集合的话,系统会自动给我们创建好;
使用show dbs 查看数据库,user 数据库 可以进入数据库;然后开始增删改查操作.

增加数据

语法如下,括号里是类似对象的文档.还有save、insetOne、insetMany,insert,save被弃用.

db.集合名字.insert({name:'我是小学生'})
删除数据

语法如下第一个参数是条件找到就删除.

db.集合名字.remove({'title':'MongoDB 教程'})
更新数据

语法如下,第一个参数是条件,第二个参数是修改的内容键值对.

db.集合名字.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
查询数据

语法如下,第一个参数是查询的条件,找到就返回

db.集合名字.find({"by":"菜鸟教程", "title":"MongoDB 教程"})

七、总结用法

1.在Mongodb中我们插入数据使用的是insert函数,其中第一个参数是需要记录的数据,形式是bson,类似于json或者是JavaScript的对象,很容易理解.

2.我们在查询和修改以及删除都需要传入一个{}对象类型的条件,比如name:“zhangsan”,就是名字等于zhangsan的这个记录,很容易理解,跟sql里的where name =“zhangsan” 一样,在mongodb里:和sql里的=一样.还有一些逻辑表达式如下.

操作语法
等于db.集合名.find({“name”:“某某人”})
小于db.集合名.find({age:{$lt:18}})
大于db.集合名.find({age: {$gt:18}})
<=db.集合名.find({age:{lte:18}})
>=db.集合名.find({age:{$gte:18}})
!=db.集合名.find({age:{$ne:22}})

当然还有or和and的操作,请看如图操作and且操作,or操作如图3所示.

image.png

图2 且查询

image.png

图3 或操作


总结且操作和或操作的语法:且就是在查询的find函数里第一个传入一个{}用逗号分隔查询的条件语句;

db.user.find({"字段1":VALUE  , "字段2":VALUE   })

如果是或操作就是这样的语法:

db.user.find({$or:[{"字段1":VALUE } ,{ "字段2":VALUE   }]})
  1. 在查询时候find()可以传俩个函数第一个是条件,第二个参数是显示的字段,不填第二个参数就和sql里的*类似返回全部,如果要选择填写可以这样传参{“age”:1},只需要写显示的字段名,然后冒号1.

八、最后总结

通过本文可以简单的学习掌握基本的数据库知识和简单增删改查操作,如果有不懂的的地方欢迎留言,最后mongodb是前端必学的数据库.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React生命周期新旧对比

组件从创建到死亡&#xff0c;会经过一些特定的阶段React组件中包含一系列钩子函数{生命周期回调函数}&#xff0c;会在特定的时刻调用我们在定义组件的时候&#xff0c;会在特定的声明周期回调函数中&#xff0c;做特定的工作。旧生命周期总结 旧的生命周期分为三个阶段 1 初…

Nacos部署(三)Docker部署Nacos2.3单机环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Nacos部署&#xff08;三&#xff09;Docker部署Nacos2.3单机环境 ⏱️…

SQLiteC/C++接口详细介绍sqlite3_stmt类(六)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;五&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;七&#xff09; 17. sqlite3_clear_bindings函数 sqlite3_clear_bindings函…

从零开始学习在VUE3中使用canvas(五):globalCompositeOperation(图形混合)

一、简介 通过设置混合模式来改变图像重叠区域的显示方式。 const ctx canvas.getContext("2d");ctx.globalCompositeOperation "source-over"; 二、属性介绍 source-over 这是默认的复合操作。将源图像绘制到目标图像上&#xff0c;保留目标图像的不透…

通过jsDelivr实现Github的图床CDN加速

最近小伙伴们是否发现访问我的个人博客http://xiejava.ishareread.com/图片显示特别快了&#xff1f; 我的博客的图片是放在github上的&#xff0c;众所周知的原因&#xff0c;github访问不是很快&#xff0c;尤其是hexo博客用github做图床经常图片刷不出来。一直想换图床&…

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边&#xff0c;左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…

【Docker】golang操作容器使用rename动态更新容器的名字

【Docker】golang操作容器使用rename动态更新容器的名字 大家好 我是寸铁&#x1f44a; 总结了一篇golang操作容器使用rename动态更新容器的名字✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天遇到一个新的需求&#xff0c;要动态改变运行中的容器名字。 可以考虑先把…

OpenLayers基础教程——WebGLPoints中要素样式的设置方法解析

1、前言 前一篇博客介绍了如何在OpenLayers中使用WebGLPoints加载海量数据点的方法&#xff0c;这篇博客就来介绍一下WebGLPoints图层的样式设置问题。 2、样式运算符 在VectorLayer图层中&#xff0c;我们只需要创建一个ol.style.Style对象即可&#xff0c;WebGLPoints则不…

静态综合实验

一.搭建拓扑结构 1.根据拓扑结构可以把网段分成14个网段&#xff0c;根据192.168.1.0/24可以划分出ip地址和环回地址 其中环回r1分别是 192.168.1.32/27 192.168.1.32/28 192.168.1.48/28 2.划分完后如图&#xff1a; 二.配置IP地址 注意&#xff1a;为了避免错误&#…

业务服务:xss攻击

文章目录 前言一、使用注解预防1. 添加依赖2. 自定义注解3. 自定义校验逻辑4. 使用 二、使用过滤器1. 添加配置2. 创建配置类3. 创建过滤器4. 创建过滤器类5. 使用 前言 xss攻击时安全领域中非常常见的一种方法&#xff0c;保证我们的系统安全是非常重要的 xss攻击简单来说就…

JavaSE:实现象棋游戏

文章目录 1. 每日一言2. 游戏内容介绍3. 代码介绍4. 全部代码4.1 MainFream4.2 GamePanel4.3 ChessFactory4.4 Bing4.5 Boss4.6 Che4.7 Chess4.8 Ma4.9 Pao4.10 Shi4.11 Xiang 结语 1. 每日一言 Every cloud has a silver lining. 天无绝人之路。 2. 游戏内容介绍 象棋是一种…

‘str‘ object has no attribute ‘decode‘

跑别人代码的时候遇到一个问题 print(f"{gpu_device_name.decode(utf-8)} is allocated sucessfully at location: {gpu_device_location}")结果就报错了 解决问题如下 aa "adfd"aa.decode(utf-8)结果如下 aa "adfd" aa.encode().decode(ut…

初识进程的地址空间、页表

一、&#x1f31f;问题引入 &#x1f6a9;代码一&#xff1a; #include<stdio.h>#include<unistd.h>int g_val100;int main(){pid_t idfork();if(id0){//子进程while(1){printf("I am a child pid:%d ppid:%d g_val:%d\n",getpid(),getppid(),g_val);…

# Maven Bom 的使用

Maven Bom 的使用 文章目录 Maven Bom 的使用概述BOM特点优点缺点 MavenMaven 安装安装步骤settingx.ml常用仓库地址Idea 使用maven常见坑 SpringBoot 项目Bom使用案例项目结构主项目 zerocode-back-servezc-dependency&#xff08;第三方jar管理&#xff09;子模块zc-serve子模…

【保姆级教程】YOLOv8目标检测:训练自己的数据集

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple二、数据准备 2.1 安装labelme标注软件 pip install label…

2024阿里云2核2G服务器租用价格99元和61元一年

阿里云2核2G服务器配置优惠价格61元一年和99元一年&#xff0c;61元是轻量应用服务器2核2G3M带宽、50G高效云盘&#xff1b;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large&#xff0c;2核2G、3M固定带宽、40G ESSD entry系统盘&#xff0c;阿里云活动链接 aliyunfuwuqi.…

[STM32] Keil MDK 新建工程编译不通过(warning: #2803-D和Error: L6218E)解决方法备忘

按照野火的PDF教程的第4章&#xff1a;[野火]《RT-Thread 内核实现与应用开发实战—基于STM32》.pdf 新建 Keil MDK 工程&#xff0c;工程设置完成后点击编译按钮&#xff0c;编译不通过&#xff1a; RTE\Device\ARMCM3\startup_ARMCM3.c(75): warning: #2803-D: unrecognize…

JVM快速入门(1)JVM体系结构、运行时数据区、类加载器、线程共享和独享、分区、Java对象实例化

5.1 JVM体系结构 线程独占区-程序计数器&#xff08;Program Counter Register&#xff09; 程序计数器是一块较小的内存空间&#xff0c;它可以看做是当前线程所执行的字节码的行号指示器&#xff1b;在虚拟机的概念模型里&#xff0c;字节码解释器工作时就是通过改变这个计数…

C++:练习题

一、构造、析构顺序 C c; int main() {A a;B b;static D d;return 0; } //构造顺序&#xff1a;C A B D //析构顺序&#xff1a;~B ~A ~D ~C 二、拷贝构造次数 以下代码共调用多少次拷贝构造&#xff1f; Widget f(Widget u) //第一次&#xff1a;传值拷贝构造 {Widget v(u…

【QT+QGIS跨平台编译】之九十:【QGIS_Crashhandler+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、QGIS_Crashhandler介绍二、QGIS下载三、文件分析四、pro文件五、编译实践一、QGIS_Crashhandler介绍 QGIS_Crashhandler模块是QGIS中的一个重要组成部分,它提供了QGIS程序的错误崩溃处理与跟踪。 二、QGIS下载 QGIS网址: QGIS Source Download 获取最新版本的…