mongodb 入门学习-数据库创建、用户信息创建(一)总结

本文介绍了MongoDB的基本概念,如数据库、用户创建、查询和删除。在MongoDB中,数据库创建使用`use dbname`,用户创建涉及指定角色。文章强调了MongoDB的权限管理和认证过程,以及如何通过`show dbs`和`show users`命令查看数据库和用户。同时,还讨论了用户修改和数据库删除的操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 知识回顾

 关系数据库中几个名词,database, table, row ,column,index ,对应到nosql mongo 中  database,collection,document,field,index, 所有除了不能join 外,大部分概念是一样的。存储的数据结构不一样。关系数据库对字段类型,数据格式有要求,mongo 可存储的数据结构多样化。 需要注意的是mongo 中的  id  构成。

Mongo ObjectId 规则

ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时
接下来的 3 个字节是机器标识码
紧接的两个字节由进程 id 组成 PID
最后三个字节是随机数

 id 中包含了时间戳,所有可以通过id 来获取记录时间。

mongo 中插入数据后,系统会生成唯一主键id, 如果不想使用系统生成的id ,可以在插入文档数据时,增加_id 字段,安装自定义的策略进行。此时会采用自定义id。

2 数据库创建

 传统关系数据库采用create database dbname,  而mongo 则使用 use , use dbname ,当 db 不存在时,则创建,存在时则切换到db. 因为mongo 默认连接使用的库是test 库.

可以使用  show dbs  或 db 进行查看数据库

需要注意的是,当创建一个库后,如果没有插入数据,则当前库是不显示的,看不到库的存在,在admin 库下,可以看到所有的库。

插入数据时报错,原因是采用了auth 方式,需要先给当前库建立用户。

此时需要退出,重新登录授权,否则不能进行操作。重新登录后,执行结果

此时当前库有了数据,查看dbs

当使用一个库时,如果切换到其他库,如果是有auth 认证的情况下,切换后,执行命令就会报权限问题。所有不同的库不能直接切换,需要重启登录,然后切换授权使用。如果没有授权,则执行命令不会就结果产生。以下错误就是切换admin 和demo2 库时发生的错误。

 3 用户创建

  创建用户的命令  $username,$password 当前访问库的用户和密码,$root 当前库的角色,$dbname ,当前用户角色作用哪个库。 mongo 中角色内置的,每个角色代表不同的访问权限。

db.createUser(
     {
       user:"$username",
       pwd:"$password",
       roles:[{role:"$root",db:"$dbname"}]
     }
  )

创建时如何知道有哪些角色呢,可以使用命令show roles

show roles

输出的内容就是内置的角色,创建用户时,可根据需要选择适合的角色进行创建。 

{
        "role" : "dbAdmin",
        "db" : "demo2",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "dbOwner",
        "db" : "demo2",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "enableSharding",
        "db" : "demo2",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "read",
        "db" : "demo2",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "readWrite",
        "db" : "demo2",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "userAdmin",
        "db" : "demo2",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
> use admin
switched to db admin
> show roles
{
        "role" : "__queryableBackup",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "__system",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "backup",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "clusterAdmin",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "clusterManager",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "clusterMonitor",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "dbAdmin",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "dbAdminAnyDatabase",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "dbOwner",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "enableSharding",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "hostManager",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "read",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "readAnyDatabase",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "readWrite",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "readWriteAnyDatabase",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "restore",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "root",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "userAdmin",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
{
        "role" : "userAdminAnyDatabase",
        "db" : "admin",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}

4  用户查询

  每个库下可能创建了很多用户,怎么知道有哪些用户呢。

可以通过两种方式进行。

show users

 或者

db.system.users.find()

5 用户修改

   用户修改很简单采用  updateUser 方法进行。 第一个参数为用户名,第二个为内容,根据用户名修改其内容。

db.updateUser($username,{})
db.updateUser(
      "demo01",
	  {     
       pwd:"demo01",
       roles:[{role:"readWrite",db:"demo2"}]
     }
  )

6 用户删除

db.dropUser($username)

8 数据库删除

mongo 数据库没有修改,所有当前数据库创建有有问题,或者不需要时,可以删除,删除时,需要先切换到库,然后执行命令

1 切换库
use dbname

2 删库
db.dropDatabase()

总结 Mongo 不同的库需要不同的用户进行管理,每个业务库最少可以建立2个用户,一个是普通用户,一个是管理员用户,Mongo 建立用户是在库的基础上,admin 库比较特殊,可以给其他库创建不同用户角色,但是不能直接操作其他库。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值