MongoDB 是一种非关系数据库,是一种 NoSQL 型数据库,用于应对大数据和分布式系统的数据库,具有高扩展性和分布式,没有复杂的关系模型。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。将数据存储为一个文档,数据结构由键值对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 简介和安装

MongoDB 是一种NoSQL型数据库,使用C++编写,基于分布式文件存储的开源数据库系统。
官方下载地址
在 Windows 系统环境下,可以下载安装包或者压缩包,解压后在 bin 目录下找到可执行的文件,其中 mongod.exe 是数据库服务,使用时需要打开,mongo.exe 是MongoDB数据库的控制台,命令终端。另外,该目录下还提供了数据库的状态查看和管理小程序。

MongoDB 服务器的运行

*有两种方式运行:命令行* 和 配置服务 **
第一种方法是从终端运行 MongoDB 服务器,需要指定数据库的存储路径:

1
mongod.exe --dbpath mydbpath\db

第二种方法是编写Windows下的服务程序,使MongoDB服务器以服务的形式存在,创建一个 mongodd.cfg 文件,在其中指定日志路径和数据库路径:

1
2
3
4
5
6
systemLog:
destination: file
path: D:\Program Files (x86)\mongodb-win32-x86_64\bin\log\mongod.log
storage:
dbPath: D:\Program Files (x86)\mongodb-win32-x86_64\bin\db

然后以管理员的身份运行:mongod.exe --config "path\mongod.cfg" --install 安装服务,这时可以在Windows服务中看到一个名为MongoDB的服务,可以手动启动或者使用命令启动和关闭:

1
2
3
net start MongoDB   # 启动服务
net stop MongoDB # 关闭服务
mongod.exe --remove # 移除服务

连接 MongoDB 服务器

使用 mongo 命令进入 MongoDB 后台管理的shell,默认连接到其中的test数据库,可以使用一些简单的JavaScript语句。
当需要进行身份认证的时候,要切换到认证数据库上,然后才能认证:

1
2
use admin
db.auth("admin", "admin")

数据库操作

创建和删除数据库

查看所有包含数据的数据库: show dbs
查看当前使用的数据库: db
切换和创建数据库 use DB_NAME 不存在会创建
需要删除某一个数据库,可以先切换到某一个数据库下,然后执行 db.dropDatabase()

创建和删除集合

创建的基本语法:

1
db.createCollection(name, options)

name 为名称,options为选项用来指定集合的大小和文档的最大数量。
删除集合 db.collection.drop() ,删除前使用 show collections 或者 show tables 查看集合,然后调用具体的集合删除。

文档的操作

插入文档的基本操作,文档相当于一个json数据结构的文件。插入的语法为:

1
db.COLLECTION_NAME.insert(document)

其中要指定插入到的集合,document是一个json格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

使用 db.col.find() 可以查找插入的文档。

更新文档 通过 update 语句,基本语法为:

1
2
3
4
5
6
7
8
9
db.collection.update(
<query>, # 类似SQL中where后面的 找到要更改的记录
<update>, # set后面的内容 更改的内容
{
upsert: <boolean>, #没有修改记录是否插入新的
multi: <boolean>, # 插入多条记录
writeConcern: <document> #抛出异常级别
}
)

通过 save() 方法,可以通过传入一个文档替换现有的文档。

删除文档 通过 remove 来删除,基本语法为:

1
2
3
4
5
6
7
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

使用更新的方法 deleteOne()deleteMany() 方法删除文档:

1
2
3
db.collection.deleteMany({})  # 删除所有的文档
db.collection.deleteMany({status:"A"}) # 删除所有status为A的文档
db.collection.deleteOne({status:"A"}) # 删除一条

查询文档 简单的查询方式一种非结构化和一种结构化的输出方式:

1
2
db.collection.find(query, projection)
db.collection.find(query, projection).pretty()

数据的运维

备份数据库

1
2
3
4
5
6
7
8
mongodump -h localhost:27017 -d test -u test -p testpwd -o /home/backup --authenticationDatabase admin

-h 地址
-d 数据库名称
-u 用户名
-p 密码
-o 输出地址
--authenticationDatabase admin 验证账户的数据库

恢复数据库

1
mongorestore -h localhost:27017 -d test --dir /home/backup -u admin -p admin