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是前端必学的数据库.

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

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

相关文章

Swift 周报 第四十八期

文章目录 前言新闻和社区苹果突然不造车了&#xff0c;雷军&#xff1a;非常震惊&#xff01;分析师&#xff1a;马斯克或是最大赢家你会爱上的开发者活动 提案通过的提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第四十八期…

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

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;七&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;九&#xff09; 27、sqlite3_column_int 函数 sqlite3_column_int 用于返…

实物档案管理系统是做什么的

实物档案管理系统是用于管理和组织实物档案的信息系统。它的主要功能包括记录、查找、归档实物档案&#xff0c;以及提供相关的管理功能。 具体来说&#xff0c;玖拓智能实物档案管理系统可以帮助单位完成以下任务&#xff1a; 1. 档案登记与归档&#xff1a;将新收到的实物档案…

2024年【低压电工】实操考试视频及低压电工考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 低压电工实操考试视频是安全生产模拟考试一点通生成的&#xff0c;低压电工证模拟考试题库是根据低压电工最新版教材汇编出低压电工仿真模拟考试。2024年【低压电工】实操考试视频及低压电工考试试题 1、【单选题】()…

MySQL ② —— 索引原理

1. 索引 1.1 分类 主键索引、唯一索引、普通索引、组合索引、以及全文索引 主键索引 非空唯一索引&#xff0c;一个表只有一个主键索引&#xff1b;在 innodb 中&#xff0c;主键索引的 B 树包含表数据信息。 唯一索引 不可以出现相同的值&#xff0c;可以有 NULL 值。 …

后端前行Vue之路(一):初识Vue

1.Vue是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方…

Transformer的前世今生 day08(Positional Encoding)

前情提要 Attention的优点&#xff1a;解决了长序列依赖问题&#xff0c;可以并行。Attention的缺点&#xff1a;开销变大了&#xff0c;而且不存在位置关系为了解决Attention中不存在位置关系的缺点&#xff0c;我们通过位置编码的形式加上位置关系 Positional Encoding&…

Flask python 开发篇:上传文件(在指定目录下创建文件夹)

flask上传文件以及常见问题 一、flask文档上传文件的介绍二、上传文件的实现2.1、生成一个from表单&#xff0c;用来提交图片2.2、编写上传的逻辑 三、运行代码、以及常见异常四、写在最后 一、flask文档上传文件的介绍 Flask上传文件的文档介绍&#xff0c;文件上传的基本思想…

面试题--3.18

1. http与https的区别&#xff0c;以及https的认证过程及加密算法 &#xff1f; 区别&#xff1a; https协议需要到CA申请证书&#xff0c;一般免费证书较少&#xff0c;因而需要一定费用。 http是超文本传输协议&#xff0c;信息是明文传输&#xff0c;https则是具有安全性…

重磅发布|博睿数据汽车行业精选案例集!

随着大数据、人工智能等技术的发展&#xff0c;万物互联已成为大势所趋。数字经济作为我国经济增长的新引擎&#xff0c;汽车行业的数字化转型升级也在不断加速。 然而&#xff0c;在传统的IT运维管理模式下&#xff0c;汽车企业在数字化转型过程中面临重重挑战。例如&#xf…

MongoDB内存过高问题分析解决

告警 公司有个3.2.7版本的mongo复制集&#xff0c;最近几天频繁告警内存过高。 服务器配置16C64G内存。mongo备节点内存使用到55G&#xff0c;触发告警。 以下内容基于3.2.7版本&#xff0c;3.2.7版本已经太老&#xff0c;很多后来的命令和配置&#xff0c;3.2.7都没有。 …

MySQL高可用解决方案――从主从复制到InnoDB Cluster架构

2024送书福利正式起航 关注「哪吒编程」&#xff0c;提升Java技能 文末送5本《MySQL高可用解决方案――从主从复制到InnoDB Cluster架构》 大家好&#xff0c;我是哪吒。 爱奇艺每天都为数以亿计的用户提供7x24小时不间断的视频服务。通过爱奇艺的平台&#xff0c;用户可以…

UG NX二次开发(C#)-通过曲线组生成NURBS曲面

文章目录 1、前言2、UG NX中通过曲线组生成NURBS曲面的操作3、采用NXOpen C#方法的源代码1、前言 在UG NX中,曲线、曲面的操作使用比较多,对于创建NURBS曲面,可以通过曲线组来生成,本文以NXOpen C#的方法实现通过曲线组生成NURBS曲面的功能。对于UG NX二次开发感兴趣或者有…

反序列化动态调用 [NPUCTF2020]ReadlezPHP1

在源代码上看到提示 访问一下看看 代码审计一下 <?php #error_reporting(0); class HelloPhp {public $a;public $b;public function __construct(){$this->a "Y-m-d h:i:s";$this->b "date";}public function __destruct(){$a $this->a;…

Cesium.js综合实验

Cesium.js综合实验 1 概述 Cesium是一个跨平台、跨浏览器的展示三维地球和地图的开源 JavaScript 库&#xff0c;是AGI公司计算机图形开发小组与2011年研发的三维地球和地图可视化开源JavaScript库&#xff0c;Cesium一词来源于化学元素铯&#xff0c;铯是制造原子钟的关键元…

华为OD机试 - 考古问题 - 回溯、全排列问题(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

如何在Linux系统使用Docker本地部署Halo网站并实现无公网IP远程访问

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可…

最小化安装Kubesphere报错问题解决方法

最小化安装Kubesphere报错: TASK [preinstall : Stop if defaultStorageClass was not found] ****************** fatal: [localhost]: FAILED! > {"assertion": "\"(default)\" in default_storage_class_check.stdout", "changed&qu…

【王道训练营】第一题 输出 hello wangdao

文章目录 代码如下所示&#xff1a;C语言基础&#xff1a;理解基本概念和语法结构示例程序代码解析1. #include <stdio.h>2. int main()3. printf("hello wangdao");4. return 0; 更多的例子1. 使用 printf 函数打印多种不同类型的值&#xff1a;2. 使用 scanf…

在Windows系统上安装多个 Nodejs

前言 在Windows系统安装Nodejs 在Windows系统上安装多个 Nodejs v14.16.1安装位置 D:\sde\nodejs\node-v14.16.1-win-x64 v16.20.2安装位置 D:\sde\nodejs\node-v16.20.2-win-x64 v18.20.0安装位置 D:\sde\nodejs\node-v18.20.0-win-x64 v20.12.0安装位置 D:\sde\nod…