运行命令
概述
在这份指南中,您可以学习如何使用 Go 驱动运行数据库命令。您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。
执行命令
要运行数据库命令,您必须在命令文档中指定命令和相关参数,然后将命令文档传递给包装方法。命令文档必须是顺序保持类型,如bson.D
。Go 驱动提供了以下方法来运行数据库命令
RunCommand()
,该方法以SingleResult
类型返回命令响应。您可以使用此方法执行任何数据库命令。RunCommandCursor()
,该方法以Cursor
类型返回命令响应。如果您的数据库命令返回多个结果文档,您可以使用此方法。
以下代码展示了如何使用RunCommand()
方法在数据库上运行hello
命令,该命令返回当前成员在副本集中的角色信息
command := bson.D{{"hello", 1}} var result bson.M err = db.RunCommand(context.TODO(), command).Decode(&result)
有关数据库命令及其相应参数的完整列表,请参阅附加信息部分.
注意
读取偏好
RunCommand()
和 RunCommandCursor()
不遵守你在代码其他地方的 Database
对象上设置的读取偏好。你可以通过将一个 RunCmdOptions
对象传递给任一方法来为命令执行设置读取偏好。
opts := options.RunCmd().SetReadPreference(readpref.Primary()) cursor, err := db.RunCommandCursor(context.TODO(), command, opts)
有关读取偏好选项的更多信息,请参阅修改 CRUD 操作的执行 基础知识页面。
响应
每个方法都返回一个 SingleResult
对象或一个包含命令执行后数据库响应的游标。每个数据库命令执行不同的功能,因此响应内容可能因命令而异。但是,每个响应都包含以下字段的文档
字段 | 描述 |
---|---|
<command result> | 提供特定于数据库命令的字段。例如, count 返回 n 字段,而 explain 返回 queryPlanner 字段。 |
ok | 指示命令是否成功( 1 )或失败(0 )。 |
operationTime | 指示操作的逻辑时间。MongoDB 使用逻辑时间来排序操作。有关逻辑时间的更多信息,请参阅我们关于 全局逻辑时钟的博客文章。 |
$clusterTime | 提供一个返回签名集群时间的文档。集群时间是用于操作排序的逻辑时间。 该文档包含以下字段
|
示例
以下代码展示了如何使用 RunCommand()
方法运行对数据库中 db
数据库的 flowers
集合进行 count
操作的 explain
命令。该 explain
命令在 "queryPlanner"
详细模式运行
db := client.Database("db") // Creates commands to count documents in a collection and explain // how the count command runs countCommand := bson.D{{"count", "flowers"}} explainCommand := bson.D{{"explain", countCommand}, {"verbosity", "queryPlanner"}} // Retrieves results of the explain command var result bson.M err = db.RunCommand(context.TODO(), explainCommand).Decode(&result)
输出
在输出中,您应该看到解释 count
操作的字段,例如获胜计划,这是查询优化器所选的计划,以及任何被拒绝的计划。输出还包含关于 explain
命令执行的详细信息
{ "$clusterTime": { "clusterTime": { "T": 1673969525, "I": 24 }, "signature": {...} }, "command": { "$db": "db", "count": "flowers" }, "explainVersion": "1", "ok": 1, "operationTime": { "T": 1673969525, "I": 24 }, "queryPlanner": { "indexFilterSet": false, "maxIndexedAndSolutionsReached": false, "maxIndexedOrSolutionsReached": false, "maxScansToExplodeReached": false, "namespace": "db.flowers", "rejectedPlans": [], "winningPlan": { "stage": "RECORD_STORE_FAST_COUNT" } }, "serverInfo": {...}, "serverParameters": { "internalDocumentSourceGroupMaxMemoryBytes": 104857600, ... } }
更多信息
关于本指南中概念的相关信息,请参阅以下文档
要了解如何从游标中检索数据,请参阅从游标中访问数据基础知识页面。