05-列出用户
4.2.2 列出用户
列出数据库中的用户 创建用户账户后,需要列出它们,以获悉数据库中包含哪些用户账户以及分配给这些用户账户的角色。在本节中,您将列出数据库admin和test中的用户账户。对于数据库admin,您将在MongoDB shell提示符下列出其用户账户;对于数据库test,您将创建一个JavaScript脚本来列出其用户账户。 请执行如下步骤,以列出MongoDB数据库admin和test中的用户账户。 1.确保启动了MongoDB服务器。 2.启动MongoDB shell,并在shell提示符下执行下面两个命令,您将看到类似于程序清单4.3所示的输出。 程序清单4.3 列出数据库admin中的用户账户时的输出 3.在文件夹code/hour04中新建一个文件,并将其命名为list_users.js。 4.在这个文件中输入程序清单4.4所示的代码。这些代码连接到数据库test,再使用db.system.users.find()获取一个包含用户账户的游标对象,然后使用printjson()显示这些用户账户。 5.将这个文件存盘。 6.在控制台窗口中切换到文件夹code/hour04,并执行命令mongo list_users.js以运行这个脚本。程序清单4.5显示了执行脚本list_users.js得到的输出。 程序清单4.4 list_users.js:列出数据库test中的用户账户 程序清单4.5 list_users.js-output:列出数据库test中用户账户的输出 ▲
在每个数据库中,用户账户都存储在集合db.system.users中。User对象包含字段_id、user、pwd和roles,有时还包含字段otherDBRoles。要获取用户账户列表,可使用两种不同的方法。一是切换到要列出其用户账户的数据库,再执行命令show users。下面的MongoDB shell命令切换到数据库test并列出其用户账户:
use test
show users
第二种方法是对集合db.system.users执行find等查询。与第一种方法不同的是,db.system.users.find()返回一个游标对象,您可使用它来访问User文档。例如,下面的代码获取一个包含数据库admin中用户账户的游标,并返回用户账户数:
use admin
cur = db.system.users.find()
cur.count()
▼ Try It Yourself
use admin
show users
use admin
switched to db admin
show users
{
"_id" : ObjectId("52d95218d0175d12afe4bfad"),
"user" : "testUser",
"userSource" : "test",
"roles" : [
"read"
],
"otherDBRoles" : {
"test" : [
"readWrite"
]
}
}
01 mongo = new Mongo("localhost");
02 db = mongo.getDB("test");
03 cur = db.system.users.find();
04 printjson(cur.toArray());
MongoDB shell version: 2.4.8
connecting to: test
type "help" for help
[
{
"_id" : ObjectId("52d95218d0175d12afe4bfaa"),
"user" : "testAdmin",
"pwd" : "e3d019e161066bd0a872bfeba18e5afe",
"roles" : [
"dbAdmin"
]
},
{
"_id" : ObjectId("52d95218d0175d12afe4bfab"),
"user" : "testWriter",
"pwd" : "4b157b2aaefb2da1a682016569f19603",
"roles" : [
"readWrite"
]
},
{
"_id" : ObjectId("52d95218d0175d12afe4bfac"),
"user" : "testReader",
"pwd" : "a74c659e8be6c97af8541d2ed2e33002",
"roles" : [
"read"
]
}
]