开启mongodb服务以及查看数据库中的信息

本文指导如何开启MongoDB服务。首先,通过CMD进入MongoDB安装目录并定位到bin文件夹,然后使用mongod命令指定数据路径启动服务。验证服务是否开启,通过访问http://localhost:27017检查。接着,文章介绍如何查看数据库中的信息。

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

1、开启mongodb服务

(1)、打开cmd,快捷方式win+r

(2)、通过cmd命令进入mongodb安装的位置,我安装在D盘,cmd中输入d:,即可进入d盘

(3)、打开mongodb的bin文件夹,输入:cd   d:\mongodb\bin ,然后回车

(4)、输入以下命令启动服务:mongod  --dbpath d:\mongodb\data\blog,这里说明一下,我的数据库文件存放在data文件夹中,其中blog文件夹是存放博客网站的数据。


(5)、接下来验证服务是否开启,打开http://localhost:27017查看,mongodb的默认端口是27017,如果跳转到下面的网页表示开启成功。


2、查看数据库中的信息

(1)、新打开cmd,上面那个启动服务的cmd窗口别关闭,一旦关闭,开启服务的进程也被kill了
(2)、还是进入安装mongodb的bin文件夹下,输入:mongo,回车
(3)、输入:use blog,然后回车,blog存储数据库的文件夹
(4)、输入:use.users.find(),回车,users是存储数据的一个对象
(5)、接下来就可以看到查询所得的数据了,如下图所示


<think>我们被要求查看MongoDB的admin数据库中所有已存在的用户及其相关信息。根据引用[3]我们知道,admin数据库是一个权限数据库,存储的用户会自动继承所有数据库的权限。在MongoDB中,用户信息存储在系统集合`system.users`中。因此,我们可以通过查询`admin`数据库中的`system.users`集合来获取所有用户信息。步骤:1.首先,我们需要以具有查看用户权限的用户身份登录。通常,我们需要使用具有`userAdmin`或`userAdminAnyDatabase`角色的用户,或者更高权限的用户(如root)来执行此操作。2.连接到MongoDB实例,并切换到admin数据库。3.查询`system.users`集合。注意:`system.users`集合是一个系统集合,不能直接使用`showcollections`看到,但我们可以通过`db.getCollection()`来查询。命令示例: ```javascriptuse admindb.getCollection("system.users").find() ```但是,为了更好的可读性,我们可以使用`.pretty()`来格式化输出,或者使用投影来只选择我们关心的字段。另外,我们也可以使用MongoDB提供的命令`db.getUsers()`来查看用户信息,这个命令会返回更结构化的用户信息。因此,我们可以有两种方法:方法一:直接查询系统集合```javascriptuse admindb.system.users.find().pretty()```方法二:使用`db.getUsers()`命令```javascriptuseadmindb.getUsers()```注意:`db.getUsers()`命令返回的信息包括用户、角色、权限等,而且格式更友好。但是,需要注意的是,`db.getUsers()`命令需要当前用户具有`userAdmin`或`userAdminAnyDatabase`等角色权限。我们更推荐使用`db.getUsers()`,因为它专门用于获取用户信息,并且返回的信息更易于理解。如果我们需要查看所有数据库的用户(而不仅仅是admin数据库的用户),那么我们可以使用`db.getUsers({showCredentials: true})`来查看,但注意,默认情况下密码哈希是隐藏的,除非我们指定`showCredentials:true`,不过显示密码哈希通常是不必要的。根据用户需求,我们只需要查看admin数据库中的用户,所以使用`db.getUsers()`即可。另外,引用[1]中提到,可以通过一些命令查看当前用户的角色和权限。这里我们查看的是所有用户,所以使用上述方法。操作步骤:1.打开MongoDBshell,并连接到MongoDB实例。2.切换到admin数据库:`useadmin`3.如果已经认证,则可以直接执行;否则,需要先认证:`db.auth("用户名", "密码")`4.执行:`db.getUsers()`示例输出:```json[{"_id":"admin.admin","userId": UUID("..."),"user": "admin","db":"admin","roles": [{"role": "userAdminAnyDatabase", "db":"admin" },{"role": "readWriteAnyDatabase", "db":"admin" },{"role": "dbAdminAnyDatabase", "db":"admin" },{"role": "clusterAdmin", "db":"admin" }],"mechanisms": ["SCRAM-SHA-1","SCRAM-SHA-256"]} ]```注意:`db.getUsers()`返回的是当前数据库(admin)中的用户。因为admin数据库中的用户是全局的,所以这里看到的就是所有在admin数据库中创建的用户。但是,MongoDB也允许在其他数据库中创建用户(这些用户只在该数据库中有权限)。如果要查看所有数据库中的所有用户,我们需要遍历所有数据库并执行`db.getUsers()`,或者使用`admin`数据库的全局视图。实际上,MongoDB提供了一个命令可以查看所有用户,无论他们在哪个数据库创建,只要在admin数据库中执行`db.system.users.find()`就可以看到所有用户。因为所有用户都存储在admin数据库的`system.users`集合中(从MongoDB3.0开始,用户信息都存储在admin数据库的system.users集合中,不再分散在各个数据库)。因此,在admin数据库中查询`system.users`集合,就可以看到所有用户。所以,我们也可以这样: ```javascriptuse admindb.system.users.find().pretty()```但是,这个集合中的文档可能包含一些我们不关心的字段,而且密码是经过哈希的,我们无法看到明文。总结:用户要求查看admin数据库中的所有用户及其相关信息,我们可以使用`db.getUsers()`命令,因为它返回的信息更清晰,并且只包含admin数据库中的用户(注意:在admin数据库执行`db.getUsers()`返回的是在admin数据库创建的用户,这些用户通常是全局用户)。而实际上,从MongoDB3.0开始,所有用户都存储在admin数据库的`system.users`集合中,所以`db.system.users.find()`会返回所有用户(包括在其他数据库创建的用户,因为存储位置都在admin数据库)。但是,`db.getUsers()`命令只返回当前数据库的用户(即admin数据库的用户),而不会返回其他数据库的用户(比如在test数据库创建的用户)。所以,如果我们要查看所有用户(包括在非admin数据库创建的用户),必须使用`db.system.users.find()`。因此,我们需要明确用户的需求:-如果用户需要查看所有在admin数据库创建的用户(这些用户通常是具有全局权限的用户),则使用`db.getUsers()`。-如果用户需要查看整个MongoDB实例的所有用户(包括在特定数据库创建的用户),则使用`db.system.users.find()`。根据问题描述:“在MongoDB的admin数据库查看所有已存在的用户”,这里有两种理解:1.查看在admin数据库创建的用户(即用户账户存储在admin数据库的用户)?->使用`db.getUsers()`2.查看整个MongoDB实例的所有用户(因为用户信息都存储在admin数据库的system.users集合中)? ->使用`db.system.users.find()`但是,问题中明确说“admin数据库查看所有已存在的用户”,所以可能是指第一种理解。不过,实际上在admin数据库中,`db.getUsers()`和`db.system.users.find()`都可以查到用户,只是范围不同。为了确保全面,我们可以这样解释:在MongoDB中,所有用户都存储在admin数据库的`system.users`集合中,无论他们是在哪个数据库创建的。因此,在admin数据库中查询`system.users`集合,可以获取整个实例的所有用户。而`db.getUsers()`命令只返回在admin数据库创建的用户(即这些用户的身份数据库是admin)。所以,如果我们需要查看整个实例的所有用户,使用: ```javascriptuse admindb.getCollection("system.users").find().pretty() ```如果只需要查看在admin数据库创建的用户,使用: ```javascriptuse admindb.getUsers() ```根据问题,用户要求查看admin数据库中的用户,通常是指身份数据库为admin的用户,所以推荐使用`db.getUsers()`。但是,问题描述中并没有明确区分,所以我们可以提供两种方法,并说明区别。因此,回答如下:要查看MongoDB的admin数据库中已存在的用户(即在admin数据库创建的用户),可以使用`db.getUsers()`命令。如果需要查看整个MongoDB实例的所有用户(包括在其他数据库创建的用户),则查询`system.users`集合。步骤:1.连接到MongoDB实例,并切换到admin数据库:```bashmongo--port27017 -u "admin"-p"password" --authenticationDatabase admin```或者连接后:```javascriptuseadmindb.auth("admin","password")```2.执行以下命令之一:**方法一:查看admin数据库中的用户(推荐)**```javascriptdb.getUsers()```此命令返回在admin数据库创建的所有用户,包括他们的角色和权限。**方法二:查看整个实例的所有用户(包括在非admin数据库创建的用户)**```javascriptdb.system.users.find().pretty()```注意:执行这些命令需要当前用户具有相应的权限,如`userAdmin`或`userAdminAnyDatabase`角色。示例输出(`db.getUsers()`):```json[{"_id": "admin.root","userId": UUID("b5c2a5a9-38d5-4a3b-8a1f-3c7d7d8e8f9c"),"user": "root","db":"admin","roles": [{"role": "root","db": "admin"}],"mechanisms":["SCRAM-SHA-1","SCRAM-SHA-256"]}]```示例输出(`db.system.users.find().pretty()`):```json{"_id": "admin.root","userId" :UUID("b5c2a5a9-38d5-4a3b-8a1f-3c7d7d8e8f9c"),"user": "root","db": "admin","credentials": {"SCRAM-SHA-1" :{"iterationCount" :10000,"salt": "...","storedKey" :"...","serverKey" :"..."},"SCRAM-SHA-256" :{"iterationCount":15000,"salt" :"...","storedKey": "...","serverKey": "..."}},"roles" :[{"role" :"root","db" :"admin"}]}```注意:在`system.users`集合的查询结果中,会显示用户的凭证(哈希后的密码),而`db.getUsers()`不会显示这些凭证。因此,我们通常使用`db.getUsers()`来查看用户信息,因为它更安全且信息更简洁。引用说明:-引用[1]:提到了查看当前用户的角色和权限,我们可以通过`db.getUsers()`得到类似的信息。-引用[3]:说明了admin数据库的作用,即存储全局用户权限。最后,生成相关问题。</think>### 在 MongoDB 的 admin 数据库查看所有用户及信息MongoDB 中,所有用户信息都存储在 `admin` 数据库的 `system.users` 集合中[^3]。以下是查看用户的两种方法: #### 方法一:使用 `db.getUsers()` 命令(推荐) ```javascript // 切换到 admin 数据库 use admin // 查看所有用户信息(包含角色和权限) db.getUsers() ``` **输出示例**: ```json [ { "_id": "admin.root", "userId": UUID("b5c2a5a9-38d5-4a3b-8a1f-3c7d7d8e8f9c"), "user": "root", "db": "admin", "roles": [ { "role": "root", "db": "admin" } ], "mechanisms": [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }, { "_id": "admin.app_user", "user": "app_user", "db": "admin", "roles": [ { "role": "readWrite", "db": "app_db" } ] } ] ``` #### 方法二:直接查询系统集合 ```javascript use admin // 查看完整用户信息(包含密码哈希等敏感字段) db.getCollection("system.users").find().pretty() // 只查看关键字段(用户名和角色) db.system.users.find( {}, { "user": 1, "roles": 1, "_id": 0 } ).pretty() ``` #### 关键字段说明: | 字段 | 说明 | |------------|---------------------------------------------------------------------| | `user` | 用户名 | | `db` | 用户所属的认证数据库(admin用户全局有效)[^3] | | `roles` | 用户角色列表(格式:`{ role: "<角色名>", db: "<数据库名>" }`) | | `mechanisms`| 使用的认证机制(如 SCRAM-SHA-256) | | `credentials` | 密码哈希信息(敏感字段,默认不显示) | #### 注意事项: 1. **权限要求**:需要 `userAdmin` 或 `userAdminAnyDatabase` 角色权限 2. **敏感信息**:`credentials` 字段包含密码哈希值,生产环境不应直接暴露 3. **跨数据库用户**:admin 数据库中的用户具有全局权限[^3] > **操作示例**:查看特定用户的权限 > ```javascript > use admin > db.getUser("app_user") // 返回单个用户的详细权限信息[^1] > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值