mongodb 基础使用
导读
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
安装
- 我们使用社区免费版即可,下载地址open in new window,选择 version 版本,默认就好,os 选择我们的操作系统,我这里选 window
- 双击安装程序,一路 next,需要注意的是左下角有一个“install mongoDB compass” 把勾取消掉,这个是官网给出的一个图像化操作数据库软件,下载非常慢。暂时不要。
- 安装好后,在浏览器输入
127.0.0.1:27017
看到一行英文说明安装成功。 - 手动将 mongodb 添加到环境变量里,方便我们开发和使用。
基础使用
环境变量添加好以后关闭所有之前的 cmd 创建,然后重新开启一个 cmd 输入 mongo,就进入了我们的数据库,之所以重新打开 cmd,是因为 cmd 有缓存,它不会跟随系统去更新环境变量。
简单解释一下,mongodb 这个名称,在下面开启服务和关闭服务都会用到,哪儿来的?是我们安装 mongodb 软件的时候,它有一个安装选择目录界面里自带的,实际上我们可以修改成别的名字,这个名字就是它服务的名字。
- mongo 命令启动的是 mongo.exe 这是客户端,用来操作数据库的
- mongod.exe 这个是数据库的服务端
cmd 命令
- cmd 命令输入 mongo 回车 它启动的就是 mongo.exe
- db :该命令是查看当前所在的数据库,默认第一次都是 test
- show dbs :该命令是查看所有数据库
- use dbname :选择数据库,就算没有该数据库也可以
- db.users.insert({name: "宋宇", age: 20}) :在数据库里插入一个文档,文档组成得 users 叫数据集合,如果不存在这个集合,当插入数据时会自动生成
- db.users.find() :查询该集合里所有的文档数据
- show collections 或 show tables :查看该数据库里有多少集合
- 【数据库 db】> 【集合 users】>【文档数据】
- 删除文档:db.users.remove({'name':"宋宇"}) 查询条件
- 删除集合:db.users.drop() 返回 true 就是删除成功,show tables 查看集合
- 删除数据库:db.dropDatabase() 此时,输入 show dbs 发现我们得 dbname 数据库不见了
- 退出数据库:
ctrl + c
或者输入exit
- 更多 mongo 客户端命令操作可以去菜鸟教程open in new window
开启 mongodb
- win + x 选择 window powerShell(管理员),输入
net start mongodb
- 必须是管理员模式的命令窗口才可以,否则会报错误。
- 如果在管理员模式下启动,报错为“ Error: couldn't connect to server…… connection attempt failed: SocketException: Error connecting to ”,需要使用 mongod 重绑服务。cmd 中:
mongod --dbpath D:\MongoDB\Server\3.2\data
然后再net start mongodb
关闭 mongodb
net stop mongodb
创建用户
一定要先建立管理员
管理页创建在 admin 数据库,这个库是管理其他表所有用户的,我们称为管理员
use admin
// 语法固定,user用户名,pwd密码,roles规则权限:[{role:权限,db:属于哪个库,一般写当前库名}]
db.createUser({
user: "admin",
pwd: "123456",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
});
// 然后验证一下
db.auth('admin','123456') // => 1 为成功
// 关于密码,即便是数字密码,这里也要放在字符串中。
// 查看用户集合
db.system.users.find()
2
3
4
5
6
7
8
9
10
11
12
进入我们的任意数据库,创建数据库账户
当我们在其他数据库建立了用户,那么这个用户就归我们数据库管理员账户管理了,比如删除账户或赋予其他权限等
use books
db.createUser({
user:"tokyo",
pwd: "L-love-HatanoYui",
roles: [
{ role: "readWrite", db: "books" }
]
})
// 然后验证一下
db.auth('tokyo','L-love-HatanoYui') // => 1 为成功
2
3
4
5
6
7
8
9
10
创建用户注意事项
- 第一,必须要创建一个 admin 库里的管理员账户,权限最好是 root 超级管理员
- 第二,数据库的账户,比如
use dbName
进入该库,进行创建用户 - 关于权限说明:
内置角色
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
具体角色的功能
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
删除用户
删除指定用户db.dropUser("userName")
删除当前库所有用户db.dropAllUser()
修改密码
db.changeUserPassword("userName","newPass")
权鉴访问数据库
它的作用是给我们 mongodb 创建用户后的一个确认,每次创建用户后,都需要一次确认,当我们的数据库有了管理员后,那么在访问数据库时就必须要使用账户密码来登陆。连接数据库的方式写法在 cmd 中有两种
当我们创建用户后,需要权鉴通过一次,
db.auth("userName", "password")
,修改配置文件后【第小 3 步骤】,以后每次访问数据库就要带上用户密码了本机连接:
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
mongo --port 27017 use admin db.auth("adminUser", "adminPass") // 输出 1 表示验证成功
1
2
3
4上面两种都是在 cmd 中登陆访问数据库,一般我们写程序都是在 js 中。
开启权健那么光用命令权健只是本次有效,一旦 cmd 窗口关闭,意味着权健失效。所有我们还需要配置一下
C:\Program Files\MongoDB\Server\4.2\bin>
目录下mongod.cfg
文件找到security
,格式不要错,最好粘贴我下面的代码。net: port: 27017 bindIp: 127.0.0.1 #processManagement: security: authorization: enabled #operationProfiling:
1
2
3
4
5
6
7
8
9
10
11执行 net stop mongodb,net start mongodb,然后就生效了
停用权健,把
security:authorization: enabled
前面都加上#
,注释掉后,重启服务就好了,这样以后登陆就不需要账户了。
js 中使用
首先需要在我们的项目中安装 mongoose yarn add mongoose
示例:
// 引入mongoose
const mongoose = require("mongoose");
// 2.连接数据库
var defaultUrl = "mongodb://127.0.0.1:27017/websong";
var userUrl = "mongodb://songyu:123456@localhost/websong";
/*
defaultUrl是连接我们没有设置账户的数据库
userUrl是连接我们有账户的数据库
*/
let connet = mongoose.createConnection(defaultUrl || userUrl, {
useNewUrlParser: true, // 新的url解析器
useUnifiedTopology: true, // 使用新的解释器
});
connet.on("open", () => {
console.log("成功连接后:打印这个日志");
});
connet.on("error", (err) => {
console.log("失败:", err);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
摘要:MongoDB 在 bin 目录下提供了一系列有用的工具,这些工具提供了 MongoDB 在运维管理上 的方便。
工具 | 描述 |
---|---|
mongosniff | mongodb 监测工具,作用类似于 tcpdump |
mongodump | MongoDB 数据备份工具 |
mongoimport | Mongodb 数据导入工具 |
mongoexport | Mongodb 数据导出工具 |
bsondump | 将 bson 格式的文件转储为 json 格式的数据 |
mongoperf | |
mongorestore | MongoDB 数据恢复工具 |
mongod.exe | MongoDB 服务启动工具 |
mongostat | mongodb 自带的状态检测工具 |
mongofiles | GridFS 管理工具,可实现二制文件的存取 |
mongooplog | |
mongotop | 跟踪一个 MongoDB 的实例,查看哪些大量的时间花费在读取和写入数据 |
mongos | 分片路由,如果使用了 sharding 功能,则应用程序连接的是 mongos 而不是 mongod |
mongo | 客户端命令行工具,其实也是一个 js 解释器,支持 js 语法 |