MongoDB安装和使用(保姆级教程)
MongoDBMongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
一.简介
1 MongoDB
概述
MongoDB
是一个基于分布式文件存储的数据库。由C++
语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
Mongo
最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
默认端口为27017
。
数据库 (DataBase) 是按照数据结构来组织、存储和管理数据的 应用程序
关系型数据库和非关系型数据及其区别
介绍
一个通俗易懂的比喻:关系型数据库就类似于Excel,非关系型数据库类似于word,用哪一个,取决你想要编辑和处理什么数据。
关系型数据库:将数据存储在表中的数据库,以二维表为数据结构。表和字段类型之间的关系需要明确定义,以SQL语句为操作指令,也称为SQL数据库。主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2 等。
非关系型数据库:不像关系数据库那样使用行和列的表格模式的数据库。相反,它的存储模型是针对它所存储的数据类型进行优化的。不只有使用SQL语句作为操作指令,可以使用其他类型的查询语言,也被称为NoSQL(Not only SQL)数据库, 不需要预先定义关键数据的模式,比SQL数据库更加灵活。主流的 NoSQL 数据库有 Redis、MongBD、Hbase、CouhDB 等。
关系型数据库
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点: 1、读写性能比较差,尤其是海量数据的高效率读写; 2、固定的表结构,灵活度稍欠; 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点: 1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘; 3、高扩展性; 4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点: 1、不提供sql支持,学习和使用成本较高; 2、无事务处理; 3、数据结构相对复杂,复杂查询方面稍欠。
区别
1、数据存储方式不同。 关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。
2、扩展方式不同。
SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。
因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。而NoSQL数据库是横向扩展的。
而非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
3、对事务性的支持不同。
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
2 数据库的作用
数据库的主要作用就是 管理数据 ,对数据进行 增删改查 crud
3数据库管理数据的特点
相比于纯文件管理数据,数据库管理数据有如下特点: 1.速度更快 2.扩展性更强 3.安全性更强
4为什么选择 Mongodb
操作语法与 JavaScript 类似,容易上手,学习成本低
二.安装
传送门 MongoDB安装(新版本保姆级教程)_最新安装mongodb-CSDN博客
管理员打开开启或关闭服务
cmd输入mongo报错 安装Mongoshell,MongoDB6之前shell是直接在里面的6之后需要单独下载
解决方法
安装shell 传输门 MongoDB Shell Download | MongoDB
把bin目录在环境变量中配置
*在cmd中输入mongosh即可进入命令行界面*
输入命令时报错
解决方法
win+r 打开 services.msc
开启mongodb服务
三.核心概念
Mongodb 中有三个重要概念需要掌握
-
数据库 (database) 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合。
数据库和传统的关系型数据库差不多的概念,每个数据库含有多个集合,每个数据库最后会作为文件储存至服务器中,另外还有一些特殊的数据库进行了保留如下:
admin:类似于root数据库,如果将用户添加至admin数据库将获取所有数据库的权限,其中一些比如查找所有数据库、关闭服务器的服务端命令只能从这里运行。
local:存储当前服务器所有本地集合的数据库,永远不可以复制。
config:主要是存储分片等信息
-
集合 (collection)集合类似于 JS 中的数组,在集合中可以存放很多文档
-
文档 (document)文档是数据库中的最小单位,类似于JS 中的对象
大家可以通过JSON 文件来理解 Mongodb 中的概念
-
一个 JSON 文件 好比是一个 数据库 ,一个 Mongodb 服务下可以有 N个数据库
-
JSON 文件中的 一级属性的数组值 好比是 集合
-
数组中的对象好比是 文档
-
对象中的属性有时也称之为 字段
注意:
一般情况下 一个项目使用一个数据库 一个集合会存储同一种类型的数据
四.MongoDB常规操作
登陆数据库
在终端输入 mongosh
4.1 数据库操作
4.1.1 查看:
MongoDB对于数据库的查看
#推荐
show dbs
#不推荐
show databases
4.1.2 创建
对于数据库的创建,MongoDB并未提供一个独立的接口,而是使用类似于mysql这种use <database> 的语法,当使用的数据库不存在时则进行创建
# 切入 test 数据库,此时触发 test 数据库的创建工作
use test
db.myCollection.insertOne( { x: 1 } );
【注】 当只是use <new database> 时,没有进行集合、文档操作,此时不会创建该数据库,只有真正操作集合后才会创建。
4.1.3 删除
对于数据库的删除,只需要简单的进入到该数据库执行db.dropDatabase()方法即可
# 删除代码执行前最好是进入改数据库后执行 use <database>
db.dropDatabase()
4.2 集合操作
4.2.1 集合创建
db.createCollection(name, options)
参数说明:
-
name: 要创建的集合名称
-
options: (可选)参数的集合
4.2.2 显示当前所有集合
show collections
4.2.3 删除某个集合
db.集合名.drop()
4.2.4 重命名集合
db.集合名.renameCollection('新集合名')
4.3文档操作
4.3.1 新增
#单个插入
db.集合名.insert({"name":"张三","age":18})
#多个插入
db.集合名.insert([{"name":"李四","age":18},{"name":"王五"}])
4.3.2 查询
db.集合名.find(查询条件)
db.arts.find({age:19})
4.3.3 更新,修改
db.集合名.update(条件,新数据[是否新增,是否修改多条,])
#只修改年龄
db.集合名.update({name:'张三'},{$set:{age:19}})
update() 有两个参数,都是对象,中间用逗号“ ,”间隔;
第一个参数表示需要修改的值;
第二个参数用 $set 操作符指向更新后的值。
是否新增 指条件匹配不到数据则插入(true
是插入,false
否不插入默认)
是否修改多条 指将匹配成功的数据都修改(true
是,false
否默认)
db.c3.update({uname:"zs2"},{$set:{age:30}},false,true)
4.3.4 删除
db.集合名.remove(查询条件,true)
是否删除一条
true:是(删除的数据为第一条)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)