MongoDB学习

配置和启动(6.0.2版本)

  1. 环境变量中系统变量中的Path中加入bin的地址

    D:\MongoDB\bin
    
  2. 在data目录(bin的同级目录)下新建文件夹db(必须创建数据库文件的存放文件夹)

  3. 启动MongoDB服务

    #找到db的目录
    
    cd D:\MongoDB\data\db
    
    #执行命令
    
    mongod  --dbpath D:\MongoDB\data\db
    
    #启动后,浏览器访问,显示 It looks like you are trying to access MongoDB over HTTP on the native driver port.
    
    http://localhost:27017
    
  4. 配置MongoDB服务

    # 1. 在data目录下新建文件夹log,存放日志文件
    
    # 2. 在MongoDB根目录(bin所在目录)下,新建文件mongo.config
    
    # 3. 在mongo.config中写入
    
    dppath=D:\Mongodb\data\db
    logpath=D:\Mongodb\data\log\mongo.log
    
    # 4. 用管理员身份找到 D:\Mongodb\bin 目录,输入命令(最后字符串即是服务名)
    
    mongod -dbpath "D:\Mongodb\data\db" -logpath "D:\Mongodb\data\log\mongo.log" -install -serviceName "MongoDB"
    
    # 5. 此时,MongoDB已经成为windows服务了,可以在服务列表(services.msc)查看
    
    # 6. 此时,可以使用命令启动关闭服务了(需要在管理员方式下)
    
    net start MongoDB
    
    net stop MongoDB
    
    # 7. 删除服务
    
    mongod --dbpath "D:\MongoDB\data\db" --logpath "D:\MongoDB\data\log\mongo.log" --remove --serviceName "MongoDB"
    
  5. 安装mongosh

    # mongodb6.0以后做出了重大改变,mongodb已经不再默认为你安装shell工具,因此需要安装一个额外的shell,这个工具被称为mongosh
    
    https://www.mongodb.com/try/download/shell
    
    # 安装或者解压完成后,配置系统变量,将bin目录加入Path
    
    D:\MongoDB\mongosh-1.6.0-win32-x64\bin
    

简单使用

中文文档(4.2,对比着看吧):https://mongodb.net.cn/

  1. 在管理员方式下输入mongosh,进入mongoDB命令模式

    # 命令行中显示
       
    Current Mongosh Log ID: 6360b9726fb692b9c13d961d
    Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0
    Using MongoDB:          6.0.2
    Using Mongosh:          1.6.0
    ......
    
  2. 简单命令

    # 显示所有数据库(新创建的数据库里面需要有数据才可以显示)
    
    show dbs
    
    # 显示当前正在使用的数据库
    
    db
    
    # 切换至该数据库,如果数据库不存在,则创建数据库
    
    use DATABASE_NAME
    
    # 插入数据(如果已经切换至数据库再使用此命令,就会创建collection,也就是mysql的表)
    
    db.DATABASE_NAME.insert({"键":"值"})
    
    ####################################
    === 下方命令使用在已经切换至的数据库下 ===
    ####################################
    
    # 删除当前数据库(似乎是只删除了数据)
    
    db.dropDatabase()
    
    # 显示当前数据库的集合
    
    show collections
    
    show tables # show collections 命令会更加准确点
    
    # 创建集合,类似mysql的表
    
    db.createCollection("集合名", options)
    
    # options : 可选参数, 指定有关内存大小及索引的选项
    ## capped : (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
    ## autoLindexId : 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
    ## size : (可选)为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
    ## max : (可选)指定固定集合中包含文档的最大数量。
    
    db.createCollection("test",{capped : true, size : 6142800, max : 10000})
    
    # 删除当前数据库的集合
    
    db.COLLECTION_NAME.drop()
    
    # 查看已插入文档
    
    db.COLLECTION_NAME.find()
    
    # ......
    
    # 其他的知识,如增删改查文档(即mysql的行)等,看其他文档,如菜鸟教程
    
    https://www.runoob.com/mongodb/mongodb-tutorial.html
    

用户管理

默认情况下,MongoDB没有启用访问控制,因此没有默认用户或密码;所以需要我们在admin数据库中创建。

  1. 用户权限列表

    Built-In Roles(内置角色):
      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和write不是表面的读取数据和写入数据
    
    read:提供读取所有非系统集合和system.js集合上的数据的功能
    
    readWrite:提供read角色的所有特权以及修改所有非系统集合和system.js集合上的数据的能力
    
    dbAdmin:提供执行管理任务的能力,例如与模式相关的任务,索引和收集统计信息。该角色不授予用户和角色管理特权
    
    userAdmin:提供在当前数据库上创建和修改角色和用户的功能。由于该userAdmin角色允许用户向任何用户(包括他们自己)授予任何特权,因此该角色还间接提供了 对数据库或 集群(如果作用域为数据库)的超级用户访问权限admin
    
    clusterAdmin:提供最大的群集管理访问。这个角色组合由授予的权限clusterManager, clusterMonitor和hostManager角色。此外,角色提供了dropDatabase操作
    
    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
    
    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
    
    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    
    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
    
    root:只在admin数据库中可用。超级账号,超级权限
    
    
    # 数据库用户大类可细分为读read和读写readWrite两种角色,而每个角色拥有一定的权限,比如
    
    readWrite 角色具有创建/删除集合、创建删除索引和集合CRUD等16种权限,跨数据库角色表示该角色不仅对某个数据库有指定的操作权限,还对实例中其他所有(用户创建的)的数据库都具备同样的权限,比如readWriteAnyDatabase,具备对所有数据库有readWrite权限。这里有个特例,就是给用户授权角色时,如果授权时指定的数据库是admin,则即使仅指定readWrite,也同样具备readWriteAnyDatabase角色,也就是说对admin具有readWrite角色,那么对其他数据库也具有
    

    这篇文章感觉很不错:https://zhuanlan.zhihu.com/p/26468035

  2. 指定用户进入MongoDB

    # 用户授权连接
    
    mongo --authenticationDatabase admin -u user -p pwd
    
    # 连接后授权
    
    mongosh
    
    db.auth('user','pwd')
    
  3. 创建用户

    # roles : role 这里面放用户角色 db 指定可访问数据库(只在admin数据库中可用,只能指定admin)
    # 为某个数据库创建用户时,最好切换到该数据库
    
    db.createUser(
      {
        user: "user1",
        pwd: "user1",
        roles: [ { role: "", db: "" },
        		 { role: "", db: "" }
               ]
      }
    )
    
  4. 查看用户

    # 查看用户列表
    
    db.system.users.find()
    
    # pretty()格式化查看
    
    db.system.users.find().pretty()
    
    # 查看指定用户
    
    db.runCommand({usersInfo:"username"})
    
    # 查看当前数据库下用户
    
    show users
    
  5. 修改用户密码

    db.changeUserPassword("user","pwd")
    
  6. 删除用户

    db.system.users.remove({user:"username"})
    

图形化使用

可以使用Navicat,如果之前学过Mysql,这个使用起来很快

目前问题记录:

  1. 新建集合,直接保存:如验证等不知是干什么的,写了后会报错

  2. 在给一个用户设置了指定数据库权限后,图形化登录使用password模式需要验证数据库(admin不需要),需要使用这个指定的数据库,才可以连接成功

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值