文档菜单
文档首页
/ / /
Go 驱动
/

运行命令

在本页

  • 概述
  • 执行命令
  • 响应
  • 示例
  • 输出
  • 其他信息
  • API文档

在这份指南中,您可以学习如何使用 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

提供一个返回签名集群时间的文档。集群时间是用于操作排序的逻辑时间。

该文档包含以下字段

  • clusterTime,这是成员的最高已知集群时间戳。

  • signature,这是一个包含集群时间哈希和用于签名集群时间的密钥 ID 的文档。

以下代码展示了如何使用 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,
...
}
}

关于本指南中概念的相关信息,请参阅以下文档

要了解如何从游标中检索数据,请参阅从游标中访问数据基础知识页面。

返回

日志记录