直接用 db.getUsers() 查询用户,需先连接目标数据库并具备 userAdmin 或 root 权限;不可用 find() 读 system.users(3.0+ 已弃用);show users 是 shell 快捷命令但无过滤功能;驱动中须调用 usersInfo 命令;用户按库 scope 管理,查前须确认库和权限。

直接用 db.getUsers(),前提是已连接到目标数据库并拥有足够权限(比如 userAdmin 或 root 角色)。这不是查业务集合,而是查 MongoDB 内置的用户元数据,不能用 find() 去 system.users —— 那个集合在 3.0+ 版本后已被弃用,强行读会返回空或报错。
用 shell 连接后执行 db.getUsers()
这是最常用、最稳妥的方式,适用于 MongoDB 3.0 及以上版本:
- 先用管理员账号连进
admin库:mongo --username admin --password xxx --authenticationDatabase admin - 再切到你要查用户的数据库:
use myapp_db - 运行:
db.getUsers({usersInfo: 1, filter: {}})(加参数可过滤,不加就全量) - 注意:如果当前 db 是
admin,db.getUsers()返回的是整个集群在该库定义的用户;如果是普通库(如myapp_db),只返回该库 scope 下创建的用户
show users 命令的适用场景和限制
它本质是 shell 的快捷封装,底层调的也是 getUsers,但行为更“轻”:
- 必须在目标数据库上下文中执行(
use target_db后再show users) - 不支持传参过滤,只返回简明列表(用户名 + 角色,不含密码哈希、认证机制等细节)
- 在 mongosh(新版 shell)中可用,在旧版
mongoshell 中也支持,但在某些驱动直连场景下不可用(比如 PyMongo 不提供这个命令) - 如果提示
unauthorized,不是命令错了,而是当前用户没被授予viewUser或更高角色
用 driver 调 usersInfo 命令(如 PyMongo / Node.js)
程序里不能用 db.getUsers() 方法(那是 shell 专属),得走原生命令:
- PyMongo 示例:
db.command("usersInfo")→ 返回完整用户信息字典 - Node.js 示例:
db.runCommand({ usersInfo: 1 }) - 想查特定用户?传
{ usersInfo: "alice" }或{ usersInfo: { user: "alice", db: "myapp_db" } } - 注意:
usersInfo命令默认只返回当前 db 的用户;跨库查必须显式指定db字段,且调用者需有对应库的viewUser权限 - 别尝试
db.collection('system.users').find()—— 4.0+ 默认禁读该集合,即使开启也只返回过时结构,字段名和权限模型都对不上
最容易被忽略的一点:用户是按数据库 scope 创建的,admin 库的用户 ≠ 其他库的用户。查之前务必确认你连的是哪个库、想看哪个库的用户——连错库、切错库、权限配错库,三条里占一条,getUsers 就会安静地返回空数组,而不是报错。


















