带有 mgo 驱动程序的 MongoDB 管理命令
Posted
技术标签:
【中文标题】带有 mgo 驱动程序的 MongoDB 管理命令【英文标题】:MongoDB admin commands with mgo driver 【发布时间】:2015-06-15 05:58:26 【问题描述】:如果有管理员凭据,是否可以通过 MongoDB 的官方 Go 驱动程序 (mgo) 在 mongo shell 外部运行 mongo shell 命令,例如 db.stats()
、rs.status()
和 db.serverStatus()
?
【问题讨论】:
【参考方案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】:get stats
manually running server status commands
【讨论】:
只有链接的答案通常不是好的答案。您应该提取回答问题所需的数据,然后获取材料。以上是关于带有 mgo 驱动程序的 MongoDB 管理命令的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Go 驱动程序或 mgo/qmgo 在 MongoDB 中存储地理空间数据?