【问题标题】:MongoDB admin commands with mgo driver带有 mgo 驱动程序的 MongoDB 管理命令
【发布时间】:2015-06-15 05:58:26
【问题描述】:

如果有管理员凭据,是否可以通过 MongoDB 的官方 Go 驱动程序 (mgo) 在 mongo shell 外部运行 mongo shell 命令,例如 db.stats()rs.status()db.serverStatus()

【问题讨论】:

    标签: mongodb go mgo


    【解决方案1】:

    这当然是可能的,但首先您需要记住,您列出的“命令”实际上是 shell 助手。您需要通过mgo Session.Run 获取它们所代表的真实命令才能运行它们。

    有几种方法可以做到这一点,第一种是在 shell 中运行 db.listCommands() 并找到合适的。第二种方法是运行您希望在不带括号的情况下模拟的助手。例如:

    > rs.status
    function () { return db._adminCommand("replSetGetStatus"); }
    

    如您所见,帮助程序实际所做的是针对admin 数据库运行replSetGetStatus 命令。同样,您会发现db.stats() 实际上运行的是dbstats 命令。 db.serverStatus() 助手是您列出的三个中唯一可以按原样运行的助手。

    这是一个运行所有三个的非常简单的示例 - 我展示了两种调用形式,一种只传递一个字符串,一种更通用的选项传递完整的命令文档 - 我在测试 mongod 上运行了这个,没有auth,因此您必须自己添加该部分才能在启用 auth 的实例上进行测试:

    package main
    
    import (
        "fmt"
        "gopkg.in/mgo.v2"
        "gopkg.in/mgo.v2/bson"
    )
    
    func main() {
        session, err := mgo.Dial("localhost")
        if err != nil {
            panic(err)
        }
        defer session.Close()
    
        // Optional. Switch the session to a monotonic behavior.
        session.SetMode(mgo.Monotonic, true)
        result := bson.M{}
        if err := session.DB("admin").Run(bson.D{{"serverStatus", 1}}, &result); err != nil {
            panic(err)
        } else {
            fmt.Println(result)
        }
        if err := session.DB("test").Run("dbstats", &result); err != nil {
            panic(err)
        } else {
            fmt.Println(result)
        }
        if err := session.DB("admin").Run("replSetGetStatus", &result); err != nil {
            panic(err)
        } else {
            fmt.Println(result)
        }
    }
    

    【讨论】:

    • 老兄@Adam,你太棒了。这正是我要问的,还有更多。谢谢你!
    • 谢谢@adam。完全回答了我的问题:)
    • else 是多余的。
    【解决方案2】:

    【讨论】:

    • 只有链接的答案通常不是好的答案。您应该提取回答问题所需的数据,然后获取材料。
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2016-01-13
    • 2021-09-21
    相关资源
    最近更新 更多