gpt4 book ai didi

带有 mgo 驱动程序的 MongoDB 管理命令

转载 作者:IT老高 更新时间:2023-10-28 13:25:28 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

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)
}
}

关于带有 mgo 驱动程序的 MongoDB 管理命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com