我想获得一个数据库使用Go驱动程序的用户详细信息.

为了前任.在蒙古贝壳里

> db.getUser("testuser")
null

如何为此构造bson.M或bson.D?

我不想传递额外的参数,只想检索数据库的用户信息

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

我try 了类似上面的操作,但返回以下错误:

(CommandNotFound) no such command: 'getUser'

我错过了什么吗?

推荐答案

Database.RunCommand()是为了方便调用MongoDB的runCommand()函数,也就是说,它是一个助手来运行指定的database commands.

也就是说,您在mongoshell 中调用的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文档的值为various specifications,例如:

{ 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"}}}

Mongodb相关问答推荐

Mongodb如果数组中有外部键,则将排序应用到查找结果

用其他集合中的文档替换嵌套文档数组中的值

为什么这个查询可以在MongoDB中使用?

Mongoose updateMany 以及 Where 和 orWhere?

如何判断 mongodb 聚合,该文档具有键,该键是一个数组,其第二个元素是否存在?

Mongoose 更新不同类型的记录

Mongodb聚合中基于其他字段值的多个条件的动态新字段值

mongodb - 查找包含至少 3 个填充数组的记录

在mongoose中添加多个验证

使用 Spring Boot >= 2.0.1.RELEASE 将 ZonedDateTime 保存到 MongoDB 时出现 CodecConfigurationException

使用 MongoDB C# 驱动程序在嵌套数组上使用过滤器生成器进行查询

Mongodb:查询嵌套在数组中的json对象

mongodb nodejs - 转换圆形 struct

在 mongodb 聚合框架中执行 case-statement

错误:Could not connect to any servers in your MongoDB Atlas cluster

如何为 node.js 中的 MongoDB 索引指定 javascript 对象中的属性顺序?

将新值推送到 mongodb 内部数组 - mongodb/php

停止副本集 MongoDB

如何通过键名从 mongoDB 中检索值?

MongoError:failed to connect to server [localhost:27017] on first connect