快速入门MongoDB数据库

程序员橙子啊

2021-09-15 19:17
关注

前言

想要入门MongoDB,首先需要下载MongoDB:

下载 MongoDB 之Windows版

要在 Windows 系统上安装 MongoDB,首先需要在 MongoDB 的官网(https://www.mongodb.com/try/download/community)下载 MongoDB 的安装包,如下图所示:

下载 MongoDB 安装包

提示:下载前需要先注册/登陆 MongoDB 官网的账号。

安装 MongoDB

【步骤 1】双击运行我们刚刚下载的 .msi 格式的 MongoDB 安装包,在弹出的窗口种单击 Next,如下图所示:

运行 MongoDB 安装包

【步骤 2】接受用户许可协议,并单击 Next,如下图所示:

接受用户协议

【步骤 3】单击 Custom(自定义)按钮来自定义安装,如下图所示:

自定义安装

【步骤 4】修改安装目录,并单击 Next,如下图所示:

自定义安装目录

【步骤 5】选中“Install MongoD as a Service”,并在下面的选项中选择“Run service as Network Service user”,完成后单击 Next,如下图所示:

安装 Windows 服务

【步骤 6】取消“Install MongoDB Compass”的勾选(当然您也可以选择安装它,但这样就需要花费更久的安装时间),MongoDB Compass 是一个图形界面管理工具,后面如果需要我们也可以再单独下载(https://www.mongodb.com/try/download/compass)和安装它,完成上述操作后单击 Next,如下图所示:

取消“Install MongoDB Compass”的勾选

【步骤 7】单击“Install”按钮开始安装。

开始安装

【步骤 8】等待安装完成,单击“Finish”按钮退出安装程序即可完成安装。

完成安装

图:完成安装

验证安装

不出意外的话,完成上面的一系列操作后 MongoDB 就成功安装到您的电脑上了。想要验证安装是否成功,您可以打开“服务”,如果能在服务列表中找到 MongoDB Server,就说明 MongoDB 已经安装成功。

MongoDB Server 服务

下载 MongoDB之Mac版本安装

在 Mac OS 系统下安装 MongoDB 与在 Linux 下安装比较相似,本节我们就来详细介绍一下 Mac OS 系统下如何安装 MongoDB。

下载 MongoDB

与在 Linux 系统下安装 MongoDB 相同,首先我们需要在 MongoDB 的官网获得 MongoDB 安装包的下载链接,如下图所示:

MongoDB 官网

得到下载链接后,使用cd命令进入 /usr/local 目录,然后使用wget命令下载 MongoDB 的压缩包,命令如下:

cd /usr/local

sudo wget https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.4.3.tgz

安装 MongoDB

待压缩包下载完成后就可以尝试安装 MongoDB 了,具体的安装步骤如下:

【步骤 1】解压缩刚刚下载的压缩包,并将其重命名为 mongodb:

sudo tar -zxvf mongodb-macos-x86_64-4.4.3.tgz # 解压 MongoDB 压缩包

sudo mv mongodb-osx-ssl-x86_64-4.0.17/ mongodb # 重命名解压得到的文件夹

【步骤 2】在 /usr/local/mongodb 目录下新建两个文件夹 data 和 log,用于存储 MongoDB 的数据和日志。

sudo mkdir -p /usr/local/mongodb/data

sudo mkdir -p /usr/local/mongodb/log

使用如下命令为当前用户分配目录的读写权限:

sudo chown biancheng /usr/local/mongodb/data

sudo chown biancheng /usr/local/mongodb/log

其中“biancheng”为当前的用户名,您需要修改为您当前系统的用户名。

【步骤 3】配置 PATH。在终端中输入open -e .bash_profile命令打开 bash_profile 配置文件,然后将 MongoDB 的安装目录下的 bin 目录添加到环境变量中,如下所示:

export PATH=${PATH}:/usr/local/mongodb/bin

编辑完成后保存并退出,然后使用source .bash_profile命令使配置立即生效。

【步骤 4】使用下面的命令来启动 MongoDB 服务:

mongod--dbpath/usr/local/mongodb/data--logpath/usr/local/mongodb/log/mongo.log --fork

参数说明如下:

–dbpath 用来设置数据的存放目录;

–logpath 用来设置日志的存放目录;

–fork 用来设置在后台运行。

至此 MongoDB 就安装完成了。

验证安装

您可以使用mongod -version命令来验证 MongoDB 是否安装成功,如果出现类似下面所示的内容,则说明 MongoDB 安装成功。

mongod -version

db version v4.0.10

git version: c389e7f69f637f7a1ac3cc9fae843b635f20b766

allocator: tcmalloc

modules: none

build environment:

distmod: 2008plus-ssl

distarch: x86_64

target_arch: x86_64

一 MongoDB的应用场景

网站实时数据的插入、更新、删除。

处理规模较大但是成本很高的数据(大尺寸、低价值数据)

对象或JSON的文本存储

不需要经常通过表计算的,对事务要求不高的数据。

一些应用层的缓存

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

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

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

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

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

这些场景都有数据量大、写入操作频繁、数据价值较低、事务性要求不高的特点。

二 MongoDB与Mysql的对比

MySQL是关系型数据库。

优势:

在不同的引擎上有不同 的存储方式。

查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。

开源数据库的份额在不断增加,mysql的份额页在持续增长。

缺点:

在海量数据处理的时候效率会显著变慢。

Mongodb是非关系型数据库(nosql ),属于文档型数据库。

文档是mongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。

存储方式:虚拟内存+持久化。

查询语句:是独特的Mongodb的查询方式。

适合场景:事件的记录,内容管理或者博客平台等等。

架构特点:可以通过副本集,以及分片来实现高可用。

数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。

优点:

快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。高扩展性,存储的数据格式是json格式!

缺点:

不支持事务,而且开发文档不是很完全,完善。

Mysql和Mongodb应用场景的对比

1.如果需要将mongodb作为后端db来代替mysql使用,即这里mysql与mongodb 属于平行级别,那么,这样的使用可能有以下几种情况的考量: (1)mongodb所负责部分以文档形式存储,能够有较好的代码亲和性,json格式的直接写入方便。(如日志之类)

(2)从datamodels设计阶段就将原子性考虑于其中,无需事务之类的辅助。开发用如nodejs之类的语言来进行开发,对开发比较方便。

(3)mongodb本身的failover机制,无需使用如MHA之类的方式实现。

2.将mongodb作为类似redis ,memcache来做缓存db,为mysql提供服务,或是后端日志收集分析。 考虑到mongodb属于nosql型数据库,sql语句与数据结构不如mysql那么亲和 ,也会有很多时候将mongodb做为辅助mysql而使用的类redis memcache 之类的缓存db来使用。 亦或是仅作日志收集分析。

三 MongoDB的增删改查

3.1 创建数据库

我们使用studio 3T创建数据库和collection,数据库名为mongo。如果不创建数据库,向mongoDB中插入数据会默认插入到test数据库中。

然后在数据库中添加集合(collection),集合名为student:

可以发现student集合已经被成功添加了:

MongoDB的读操作包括查询,而写操作包括插入、更新、删除,MongoDB中的所有写操作都是单个文档级别的原子操作,你可以指定查询、更新、删除标准或过滤器(查询、更新、删除更新的条件),以标识要查询、更新、删除的文档。过滤器可以理解为关系数据库的条件查询where子句的条件。

3.2 MongoDB的插入操作

插入操作完成向集合中插入文档,MongoDB提供了以下向集合中插入文档的方法:

MongoDB的insert的语法如上,更推荐使用insertOne和insertMany,分别用来插入一条和多条文档。注意,在实际使用时collection要改成待插入集合的名称,待插入文档(document)需要插入到对应集合(collection)中,否则会默认创建一个集合再插入进去。在这里我们插入一条文档到student集合中。

使用mongo数据库之前要执行语句:

use mongo

,执行完毕即可直接操作mongo数据库。

向student集合中插入单条文档(document),执行以下语句:

1 db.student.insertOne({"name": "bigsai

插入多条文档(document),执行以下语句:

db.student.insertMany([{"name":"bigsai2","age":"22"}{"name":"bigsai3","age":"22"}])

打开student集合,会发现上面的文档(document)被成功插入了。

3.3 MongoDB的查询操作

查询操作完成从集合中查询文档,MongoDB提供了以下向集合中插入文档的方法:

1 db.collection.find()//查询文档,在括号内添加各种条件

你可以指定查询过滤器或条件以标识要返回的文档。当然MongoDB也支持各种条件查询,使用也非常简单,具体还需要查看官方文档(https://docs.mongodb.com/manual/tutorial/query-documents/),这里以查询student集合中数据字段age为22的文档为例,展示一下:

1 //db.student.find()//查询所有类似select * from student

2

3 db.student.find({"age":"22"})

可以看到查询结果如下,所有数据字段age为22的文档都被查询了出来。

3.4 MongoDB的更新操作

更新操作,又称修改操作,完成从集合中更新(修改)文档,MongoDB提供了以下更新集合文档的方法:

1 db.collection.updateOne() //3.2版中的新功能 更新一条文档记录

2

3 db.collection.updateMany() //3.2版中的新功能 更新多条文档记录

4

5 db.collection.replaceOne() //3.2版中的新功能 替换集合中的一个文档

在MongoDB中,更新操作只针对单个集合(db.collection中对应的collection)。MongoDB中的更新操作都是单个文档级别的原子操作,你可以指定更新标准或过滤器(更新的条件),以标识要更新的文档。当然MongoDB有update()方法但是已经被弃用。

我们将student集合中所有数据字段age为22的文档更新其数据字段name的值为bigsai2:

1 db.student.updateOne(

2

3 {"age":"22"},//条件

4

5 {$set:{"name":"bigsai2"}}//修改的值

6

7 )

其中{“age”:“22”}为查询的条件即找到第一条数据字段age为22的文档,而{$set:{}}则用来修改文档对应数据字段的值。updateOne()执行成功只会更新第一条匹配的文档。

此时,你如果想将数据字段name为bigsai2的两条文档的数据字段age改成18,那么执行以下语句:

1 db.student.updateMany(

2

3 {"name":"bigsai2"},

4

5 {$set:{"age":"18"}}

6

7 )

刷新结果会发现文档已经成功被更新,这种语句在sql中就类似update student set age=18 where name=bigsai2

3.5 MongoDB的删除操作

删除操作完成从集合中删除文档,MongoDB提供了以下删除集合文档的方法:

1 db.collection.deleteOne() //3.2版中的新功能 删除一条记录

2

3 db.collection.deleteMany() //3.2版中的新功能 删除多条记录

在MongoDB中,删除操作只针对单个集合(db.collection中对应的collection)。MongoDB中的删除操作都是单个文档级别的原子操作,你可以指定标准或过滤器,以标识要删除的文档。这些过滤器与查询、更新使用的过滤器用法一致。

这里delete和update操作的条件有点类似,如果使用deleteOne()语句会删除第一个匹配的文档,而使用deleteMany()会删除所有满足条件的文档。

如果我们删除所有数据字段name为bigsai2的文档可以这么操作:

1 db.student.deleteMany(

2 {"name":"bigsai2"}//条件

3 )

可以发现文档被成功删除:

补充: studio3T的安装

一、说明

1、windows: win10企业版。

2、Studio 3T: Studio 3T 2020.1.2

二、Studio 3T 下载与安装

1、下载

进入到Studio 3T 下载地址进行下载。选择合适的版本进行下载。

2、安装

(1)双击安装文件进行安装

(2)点击Next按钮进行下一步

(3)点击Next按钮进行下一步。

(4)设置安装路径,然后点击Next进行下一步。

(5)点击Finish完成安装。

3、创建连接

(1)启动Studio 3T,然后点击 Connect。

(2)点击 New Connection。

(3)设置连接信息

(4)点击Connect创建连接

创建连接成功结果后如下图所示:

举报/反馈