mongodb 如何使用go mongo-driver创建db.getUser()

inb24sb2  于 2023-01-30  发布在  Go
关注(0)|答案(1)|浏览(183)

我想使用go驱动程序获取数据库的用户详细信息。
例如,在mongoshell中

> db.getUser("testuser")
null

我该如何构造一个bson. M或bson. D呢?
我不想传递额外的参数,只想检索数据库的userinfo

var op bson.M
command := bson.D{{"getUser", 1}, {"username", "testuser"}}
err = clientInfo.Database(db).RunCommand(context.TODO(), cmd).Decode(&op)

我尝试了类似上面的东西,但它返回以下错误:

(CommandNotFound) no such command: 'getUser'

我错过了什么?

xdnvmnnf

xdnvmnnf1#

Database.RunCommand()是为了方便调用MongoDB的runCommand()函数,即运行指定database commands的助手。
也就是说,您在mongo shell中调用的getUser()函数是一个函数,而不是命令。
但是有一个usersInfo命令可以得到同样的数据,它的语法是:

db.runCommand(
   {
     usersInfo: <various>,
     showCredentials: <Boolean>,
     showCustomData: <Boolean>,
     showPrivileges: <Boolean>,
     showAuthenticationRestrictions: <Boolean>,
     filter: <document>,
     comment: <any>
   }
)

以下是执行usersInfo命令的方法:

var op bson.M
cmd := bson.D{{Key: "usersInfo", Value: bson.M{
    "user": "testuser",
    "db":   "admin",
}}}
err = clientInfo.Database(db).RunCommand(ctx, cmd).Decode(&op)

请注意,usersInfo文档具有各种规范,例如:

{ usersInfo: 1 }

返回有关运行命令的数据库中的用户的信息。mongosh为此命令调用提供db.getUsers()帮助器。

{ usersInfo: <username> }

返回有关运行命令的数据库中存在的特定用户的信息。mongosh为此命令调用提供db.getUser()帮助器。

{ usersInfo: { user: <name>, db: <db> } }

返回有关由名称和数据库指定的用户的信息。

{ usersInfo: [ { user: <name>, db: <db> }, ... ] }
{ usersInfo: [ <username1>, ... ] }

返回有关指定用户的信息。

{ forAllDBs: true }

返回有关所有数据库中用户的信息。
如您所见,getUser()命令是{ usersInfo: <username> }的简写,您可以这样调用它:

var op bson.M
cmd := bson.D{{Key: "usersInfo", Value: "testuser"}}
err = clientInfo.Database(db).RunCommand(ctx, cmd).Decode(&op)

当然,如果需要多个用户的信息,可以使用数组:

cmd := bson.D{{Key: "usersInfo", Value: []string{"testuser", "anotheruser"}}}

相关问题