MongoDB 介绍
一个面向文档对象的数据库。
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
管理 MongoDB
安装 MongoDB
首先确保你的包是最新的:
1 | sudo apt update && sudo apt upgrade -y |
然后安装 MongoDB:
1 | sudo apt install mongodb |
检查 mongodb 服务的状态:
1 | sudo systemctl status mongodb |
可以看到,服务正常启动了。
管理 MongoDB
服务状态管理
MongoDB 目前是一个 systemd 服务,因此我们使用 systemctl 来检查和修改它的状态,使用以下命令:
- 查看运行状态:
sudo systemctl status mongodb - 停止服务状态:
sudo systemctl stop mongodb - 启动服务状态:
sudo systemctl start mongodb - 重启服务状态:
sudo systemctl restart mongodb - 启用开机自启动:
sudo systemctl enable mongodb - 禁用开机自启动:
sudo systemctl disable mongodb
配置管理
- 查看配置文件:
sudo nano /etc/mongodb.conf
日志管理
- 查看日志:
sudo journalctl -u mongodb - 查看错误日志:
sudo journalctl -u mongodb --no-pager -n 100 -f | grep -i error - 查看警告日志:
sudo journalctl -u mongodb --no-pager -n 100 -f | grep -i warning - 查看提示日志:
sudo journalctl -u mongodb --no-pager -n 100 -f | grep -i notice
卸载 MongoDB
1 | sudo systemctl stop mongodb |
远程管理 MongoDB
默认无法远程访问 MongoDB,我们需要先在服务器安全组中开放 27017 端口,然后再进行配置:
1 | sudo /etc/mongodb.conf |
修改 bind_ip = 0.0.0.0 为 bind_ip = 0.0.0.0,然后重启服务:
1 | sudo systemctl restart mongodb |
安装 Studio 3T for Free,然后连接:
安全管理
默认我们不需要认证即可连接 MongoDB,这是很危险的,我们需要设置一个管理员用户来认证:
1 | mongo |
然后配置 MongoDB 的安全策略:
1 | sudo nano /etc/mongodb.conf |
将 security.authorization = enabled 写入文件,然后重启服务:
1 | sudo systemctl restart mongodb |
在 Studio 3T 中配置用户名密码即可,需要注意的是 Authentication DB 需要填写对应的。
更多安全知识参考 MongoDB数据库未授权访问漏洞防御最佳实践
MongoDB 概念
- database:数据库,是 MongoDB 的核心,用来存储数据,每个数据库都有自己的集合,集合中存储的是数据。
- collection:集合,相当于关系型数据库中的表(table)
- document:文档,相当于关系型数据库中的行(row)
- field:字段,相当于关系型数据库中的列(column)
- index:索引,相当于关系型数据库中的索引
- primary key:主键,相当于关系型数据库中的主键,MongoDB 中主键的名称默认为
_id
数据库
一个 mongodb 中可以建立多个数据库。 MongoDB 的默认数据库为 db,该数据库存储在 data 目录中。
MongoDB 的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也防止在不同的文件中。
show dbs 命令可以显示所有数据的列表。
1 | mongo |
运行 use 命令可以切换数据库,如果不存在则会自动创建。
1 | use test |
执行 db 命令可以显示当前数据库对象或集合。
1 | db |
数据库命名规范
- 不能是空字符
- 不能含有
' '(空格)、.、/、\和\0(空字符) - 应全部小写
- 最多 64 字节
默认数据库
- admin:从权限的角度来看,这是 root 数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
- config:当 Mongo 用于分片设置时,config 数据库在内部使用,用于保存分片的相关信息。
连接 MongoDB
标准 URI 连接语法:
1 | mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] |
mongodb://:这是固定的格式,必须指定username:password@:可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库host1:必须的,指定至少一个 host,host1 是这个 URI 唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。portX:可选的指定端口,如果不填,默认为 27017/database:如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。?options:是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;隔开
nodejs
安装驱动
1 | yarn add mongodb |
连接数据库
要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和端口号。
如果数据库不存在,MongoDB 将创建数据库并建立连接。
1 | var MongoClient = require('mongodb').MongoClient; |
创建集合
我们可以使用 createCollection() 方法来创建一个集合,这个集合可以是空的,也可以包含数据。
1 | var MongoClient = require('mongodb').MongoClient; |
插入数据
以下实例我们连接数据库 luozhu 的 site 表,并插入一条数据。使用 insertOne() 。
1 | var MongoClient = require('mongodb').MongoClient; |
如果要插入多条数据,可以使用 insertMany() 。
1 | var MongoClient = require("mongodb").MongoClient; |
查询数据
查询所有数据
可以使用 find() 来查找数据。find() 可以返回符合条件的所有数据。如果未指定条件,find() 返回集合中的所有数据。
1 | var MongoClient = require("mongodb").MongoClient; |
查询指定条件的数据
1 | var MongoClient = require("mongodb").MongoClient; |
更新文档
更新一条文档
1 | var MongoClient = require("mongodb").MongoClient; |
执行成功后,进入 mongo 管理工具查看数据已修改:
1 | > db.site.find({ name: "GitHub" }).pretty() |
更新多条文档
如果要跟新所有符合条件的文档数据,可以使用 updateMany() 。
1 | var MongoClient = require('mongodb').MongoClient; |
res.modifiedCount 属性返回修改的文档数量。
删除数据
删除一条数据
1 | var MongoClient = require('mongodb').MongoClient; |
删除多条数据
如果要删除多条语句可以使用 deleteMany() 方法。
1 | var MongoClient = require('mongodb').MongoClient; |
res.deletedCount 属性返回删除的文档数量。





