繁体   English   中英

使用 go 驱动程序在 MongoDB 中运行命令

[英]Run command in MongoDB with go driver

我尝试运行createUser命令。 我认为问题在于字段的顺序起着重要作用。 该命令完全像这样工作。 但突然我收到以下错误:

panic: (CommandNotFound) no such command: 'pwd', bad cmd: '{ pwd: "Test123!", roles: [ { role: "readWrite", db: "test" } ], createUser: "test" }'

因此,在不更改任何内容的情况下,function 有时会起作用,有时却不起作用。 以下 function 创建用户:

import (
    "context"
    "fmt"
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "log"
    "os"
    "solvitaInit/kube"
    "time"
)
func createUser(client *mongo.Client, userName string, pass string, dbName string, roleName string, roldeDB string)  error {
    r := client.Database(dbName).RunCommand(context.Background(),bson.M{"createUser": userName, "pwd": pass,
        "roles": []bson.M{{"role": roleName,"db":roldeDB}}})
    if r.Err() != nil {
        panic(r.Err())
    }
    return nil
}

有没有办法强制执行命令。 或者我做错了什么?

解决方案:

r := client.Database(dbName).RunCommand(context.Background(),bson.D{{"createUser", userName},
        {"pwd", pass}, {"roles", []bson.M{{"role": roleName,"db":roldeDB}}}})
    if r.Err() != nil {
        panic(r.Err())
    }

godoc : runCommand 参数...必须是保序类型,例如bson.D Map bson.M等类型无效 ...

尝试使用 bson.A(bson 数组)

r := client.Database(repoDB).RunCommand(
    context.Background(),
    bson.D{{"createUser", "user1"}, {"pwd", "pass"},
        {"roles", bson.A{bson.D{{"role", "clusterAdmin"}, {"db", "admin"}}, "readWrite"}}},
    )
if r.Err() != nil {
    panic(r.Err())
}

检查 MongoDb 文档中的其他选项: https://docs.mongodb.com/manual/reference/command/createUser/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM