MongoDB 使用 mgo 驱动程序的管理命令
MongoDB admin commands with mgo driver
是否有可能,给定管理员权限,运行 mongo shell 命令,例如 db.stats()
、rs.status()
和 db.serverStatus()
外部通过 MongoDB (mgo)?
的官方 Go 驱动程序到 mongo shell
这当然是可能的,但首先您需要记住,您列出的 "commands" 实际上是 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)
}
}
是否有可能,给定管理员权限,运行 mongo shell 命令,例如 db.stats()
、rs.status()
和 db.serverStatus()
外部通过 MongoDB (mgo)?
这当然是可能的,但首先您需要记住,您列出的 "commands" 实际上是 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)
}
}