🌻🌻 目录
- 一、MongoDB简介
- 1.1 什么是 MongoDB
- 1.2 MongoDB特点
- 1.3 MongoDB 体系结构
- 二、下载与安装
- 2.1 MongoDB下载
- 2.2 在Linux 上的安装
- 2.2.1 安装前的准备
- 2.2.2 开始安装
- 2.2.3 测试软链接启动
- 2.3 在windows上的安装
- 三、基本增删改查操作
- 3.1 选择或创建数据库
- 3.2 插入文档
- 3.3 查询集合
- 3.4 修改文档
- 3.5 删除文档
建议:可忽略理论直接下载安装
文章总结MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。
通过学习,读者将
具备MongoDB数据库的开发能力
,并且能够使用MongoDB进行项目开发。
MongoDB官方英文文档
MongoDB官方中文文档
一、MongoDB简介
1.1 什么是 MongoDB
MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
1.2 MongoDB特点
MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。
具体特点总结如下:
- (1)面向集合存储,易于存储对象类型的数据
- (2)模式自由
- (3)支持动态查询
- (4)支持完全索引,包含内部对象
- (5)支持复制和故障恢复
- (6)使用高效的二进制数据存储,包括大型对象(如视频等)
- (7)自动处理碎片,以支持云计算层次的扩展性
- (8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序,社区中也提供了对 Erlang 及.NET 等平台的驱动程序
- (9) 文件存储格式为 BSON(一种 JSON 的扩展)
1.3 MongoDB 体系结构
MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户
的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。
- (1)MongoDB 的文档(document),相当于关系数据库中的一行记录。
- (2)多个文档组成一个集合(collection),相当于关系数据库的表。
- (3)多个集合(collection),逻辑上组织在一起,就是数据库(database)。
- (4)一个 MongoDB 实例支持多个数据库(database)。
文档(document)、集合(collection)、数据库(database)的层次结构如下图:
MySQL
和MongoDB
对比
MongoDb | 关系型数据库Mysql |
---|---|
数据库(databases) | 数据库(databases) |
集合(collections) | 表(table) |
文档(document) | 行(row) |
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
嵌入文档 | MongoDB通过嵌入式文档来替代多表连接 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
二、下载与安装
2.1 MongoDB下载
下载安装包
- MongoDB官网 下载安装 (无需登录如下图)
- 本地资源库下载获取
根据上图所示下载 zip 包。
提示:版本的选择:
MongoDB的版本命名规范如:x.y.z
;
y
为奇数时表示当前版本为开发版,如:1.5.2、4.1.13;
y
为偶数时表示当前版本为稳定版,如:1.6.3、4.0.10;
z是修正版本号,数字越大越好。一般使用稳定版
详情 mongodb中文文档
2.2 在Linux 上的安装
2.2.1 安装前的准备
(1)VMware-workstation-full-12.1.0-3272444VMware 12 专业版
(2)虚拟机所使用镜像:CentOS-7-x86_64-Minimal-1708.iso
(3)mongodb: mongodb-linux-x86_64-rhel70-4.0.9.tgz(与上面资源库一致)
2.2.2 开始安装
1、上传下载回来的安装包到LINUX服务器
2、解压缩安装包到 /usr/local
tar -xvf mongodb-linux-x86_64-rhel70-4.0.9.tgz -C /usr/local
3、对解压目录重新命名
cd /usr/local
mv mongodb-linux-x86_64-rhel70-4.0.9 mongodb
rm -rf mongodb-linux-x86_64-rhel70-4.0.9.tgz
4、创建数据库目录
- MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
以下实例中我们将data目录创建于根目录下,即 /usr/local下面(/)。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath
)。
mkdir /data/db -p
5、启动MongoDB服务
- 进入mongodb的bin目录
输入命令:./mongod
6、进入MongoDB后台管理 Shell
- 另起一个终端,进入目录
cd /usr/local/mongodb/bin
输入命令:./mongo
即可进入MongDB后台管理Shell
由于它是一个JavaScript shell,您可以运行一些简单的算术运算:
2+2
4
3+6
9
注意:可以将客户端mogo文件在/bin下软链接,方便随处执行:
ln -s /usr/local/mongodb/bin/mongo /bin/mongo
2.2.3 测试软链接启动
我们另外打开命令提示符窗口,如果mongoDB是按默认的端口启动的,并且是部署在本机的。输入命令 mongo 即可登陆系统
从界面输出的信息我们可以得知,它默认连接的是test数据库
- 如果是要连接远程的mongoDB服务器 ,就输入命令
mongo 远程IP地址
如果远程的mongoDB服务端口不是默认的,需要输入命令
mongo 远程IP地址:端口
输入exit
命令可退回到命令提示符
2.3 在windows上的安装
① 第一步:解压安装启动
将压缩包解压到一个目录中。
在解压目录中,手动建立一个目录用于存放数据文件,如data/db
- 方式1:命令行参数方式启动服务(调试建议使用)
在 bin 目录中打开命令行提示符,输入cmd
再输入如下命令:
mongod --dbpath=..\data\db
我们在启动信息中可以看到,mongoDB的默认端口是
27017
,如果我们想改变默认的启动端口,可以通过--port
来指定端口。
为了方便我们每次启动,可以将安装目录的bin目录设置到环境变量的path中, bin 目录下是一些常用命令,比如mongod
启动服务用的,mongo 客户端连接服务用的。
直接打开命令窗口测试:
windows 版本的安装步骤
🔷下载 .msi 文件,下载后双击该文件,按操作提示安装即可。
🔷 安装过程中,可以通过点击"Custom(自定义)”按钮来设置 MongoDB 数据库程序安装目录,也可以使用默认目录。
🔷下-步安装“install mongoDBcompass"不勾选
(勾选需要联网下载Compass软件,可能需要更久的安装时间)
- 🔷 MongoDBCompass 是一个图形界面管理工具,我们可以在后面自己到官网下载安装
- 🔷 在初学者阶段,强烈建议
不安装
MongoDBCompass,使用命令行在操作 MongoDB类据库,以此来提高我们的编程能力,且有助于我们在编程语言中操作 MongoDB.🔷 在安装过程中选择installMongoDBasservice,是将 mongo 注册为系统服务(由此可以开机自启动及后台运行)
三、基本增删改查操作
3.1 选择或创建数据库
使用use 数据库名称即可选择数据库,如果该数据库不存在会自动创建
use mydb
3.2 插入文档
文档相当于关系数据库中的记录
- 首先我们定义一个文档变量,格式为变量名称
={}
; 例如:- 接下来就是将这个变量存入MongoDB
- 格式为:
db.集合名称.save(变量);
- 这里的集合就相当于关系数据库中的表。如下所示:
这样就在mydb
集合中存入文档。如果这个mydb
集合不存在,就会自动创建。
当然,你也可以不用定义变量,直接把变量值放入save方法中也是可以地。
3.3 查询集合
我们要查询某集合的所有文档,使用
find()
方法。语法格式为:
db.集合名称.find();
例如,我们要查询mydb
集合中的所有文档如下所示:
这里你会发现每条文档会有一个叫
_id
的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段,MongDB会自动创建,其类型是ObjectID
类型。
如果我们在插入文档记录时指定该字段也可以,其类型可以使ObjectID类型,也可以是MongoDB支持的任意类型. 例如:
use mydb
db.userList.save({"id":1001,"name":"Daniel","age":22,"address":"shanghai"});
db.userList.save({"id":1002,"name":"hollow","age":42,"address":"xian"});
db.userList.save({"id":1003,"name":"Jenny","age":32,"address":"shenzhen"});
db.userList.save({"id":1004,"name":"Wdny","age":33,"address":"gansu"});
db.userList.find();
如果我想按一定条件来查询,比如我想查询
id
为“1003”的记录,怎么办?很简单!
只要在find()中添加参数即可,参数也是json格式,如下:
db.userList.find({id:1003});
为了避免游标可能带来的开销,MongoDB还提供了一个叫
findOne()
的方法,用来返回结果集的第一条记录。
db.userList.findOne({id:1003});
id为1003的有很多条,这里只返回了一条记录。
当我们需要返回查询结果的前几条记录时,可以使用limit
方法,例如:
db.userList.find().limit(3);
3.4 修改文档
我们要想修改记录,可以使用
update
与$set
方法 .
例如:我先将姓名为Daniel
的用户文档中的age
字段值改为88
,执行下列语句
db.userList.update({name:"Daniel"},{$set:{age:88}});
3.5 删除文档
删除文档使用
remove()
方法,格式为:
db.集合名称.remove( 条件 );
请慎用remove({}), 它会一条不剩地把你的集合所有文档删的干干净净。
我们现在演示一下,删除name为“hollow
”的记录:
db.userList.remove({name:"hollow"});