mongodb 基础使用

导读

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

安装

  1. 我们使用社区免费版即可,下载地址open in new window,选择 version 版本,默认就好,os 选择我们的操作系统,我这里选 window
  2. 双击安装程序,一路 next,需要注意的是左下角有一个“install mongoDB compass” 把勾取消掉,这个是官网给出的一个图像化操作数据库软件,下载非常慢。暂时不要。
  3. 安装好后,在浏览器输入127.0.0.1:27017看到一行英文说明安装成功。
  4. 手动将 mongodb 添加到环境变量里,方便我们开发和使用。

基础使用

环境变量添加好以后关闭所有之前的 cmd 创建,然后重新开启一个 cmd 输入 mongo,就进入了我们的数据库,之所以重新打开 cmd,是因为 cmd 有缓存,它不会跟随系统去更新环境变量。
简单解释一下,mongodb 这个名称,在下面开启服务和关闭服务都会用到,哪儿来的?是我们安装 mongodb 软件的时候,它有一个安装选择目录界面里自带的,实际上我们可以修改成别的名字,这个名字就是它服务的名字。

  • mongo 命令启动的是 mongo.exe 这是客户端,用来操作数据库的
  • mongod.exe 这个是数据库的服务端

cmd 命令

  1. cmd 命令输入 mongo 回车 它启动的就是 mongo.exe
  2. db :该命令是查看当前所在的数据库,默认第一次都是 test
  3. show dbs :该命令是查看所有数据库
  4. use dbname :选择数据库,就算没有该数据库也可以
  5. db.users.insert({name: "宋宇", age: 20}) :在数据库里插入一个文档,文档组成得 users 叫数据集合,如果不存在这个集合,当插入数据时会自动生成
  6. db.users.find() :查询该集合里所有的文档数据
  7. show collections 或 show tables :查看该数据库里有多少集合
  8. 【数据库 db】> 【集合 users】>【文档数据】
  9. 删除文档:db.users.remove({'name':"宋宇"}) 查询条件
  10. 删除集合:db.users.drop() 返回 true 就是删除成功,show tables 查看集合
  11. 删除数据库:db.dropDatabase() 此时,输入 show dbs 发现我们得 dbname 数据库不见了
  12. 退出数据库:ctrl + c或者输入exit
  13. 更多 mongo 客户端命令操作可以去菜鸟教程open in new window

开启 mongodb

  1. win + x 选择 window powerShell(管理员),输入net start mongodb
  2. 必须是管理员模式的命令窗口才可以,否则会报错误。
  3. 如果在管理员模式下启动,报错为“ 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()
1
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 为成功
1
2
3
4
5
6
7
8
9
10

创建用户注意事项

  1. 第一,必须要创建一个 admin 库里的管理员账户,权限最好是 root 超级管理员
  2. 第二,数据库的账户,比如use dbName进入该库,进行创建用户
  3. 关于权限说明:
内置角色
    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数据库中可用。超级账号,超级权限
1
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 中有两种

  1. 当我们创建用户后,需要权鉴通过一次,db.auth("userName", "password"),修改配置文件后【第小 3 步骤】,以后每次访问数据库就要带上用户密码了

  2. 本机连接:mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"

  3. mongo --port 27017
    use admin
    db.auth("adminUser", "adminPass")
    // 输出 1 表示验证成功
    
    1
    2
    3
    4
  4. 上面两种都是在 cmd 中登陆访问数据库,一般我们写程序都是在 js 中。

  5. 开启权健那么光用命令权健只是本次有效,一旦 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,然后就生效了

  6. 停用权健,把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);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

mongodb 中文网open in new window

摘要:MongoDB 在 bin 目录下提供了一系列有用的工具,这些工具提供了 MongoDB 在运维管理上 的方便。

工具描述
mongosniffmongodb 监测工具,作用类似于 tcpdump
mongodumpMongoDB 数据备份工具
mongoimportMongodb 数据导入工具
mongoexportMongodb 数据导出工具
bsondump将 bson 格式的文件转储为 json 格式的数据 
mongoperf
mongorestoreMongoDB 数据恢复工具
mongod.exeMongoDB 服务启动工具
mongostatmongodb 自带的状态检测工具
mongofilesGridFS 管理工具,可实现二制文件的存取
mongooplog
mongotop跟踪一个 MongoDB 的实例,查看哪些大量的时间花费在读取和写入数据
mongos分片路由,如果使用了 sharding 功能,则应用程序连接的是 mongos 而不是 mongod
mongo客户端命令行工具,其实也是一个 js 解释器,支持 js 语法
Last Updated:
Contributors: websong