运行命令
概述
在本指南中,您可以学习如何使用Rust驱动来运行数据库命令。您可以使用数据库命令执行各种管理性和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。
本指南包括以下部分
执行命令描述了
run_command()
和run_cursor_command()
方法的语法和行为响应描述了命令执行方法返回的信息
命令示例提供了一个命令示例并描述了命令的输出
更多信息提供了本指南中提到的类型和方法的资源链接和API文档
重要
优先使用驱动方法而不是数据库命令
驱动程序为许多数据库命令提供了包装方法。我们建议在可能的情况下使用驱动程序方法而不是执行数据库命令。
要执行管理任务,请使用MongoDB Shell而不是Rust驱动。在shell中调用db.runCommand()
方法是发布数据库命令的首选方法,因为它在shell和驱动程序之间提供了统一的接口。
执行命令
要运行数据库命令,您必须在命令文档中指定命令和任何相关参数,然后将命令文档传递给命令执行方法。Rust驱动程序提供以下方法来运行数据库命令
run_command()
,它将命令响应作为Document
类型返回。您可以使用此方法执行任何数据库命令。run_cursor_command()
,它返回命令响应作为可迭代的Cursor
类型。只有当您的数据库命令返回多个结果文档时,您才能使用此方法。
以下代码展示了如何使用run_command()
方法运行hello
命令,该命令返回当前成员在副本集中的角色信息,在数据库中执行。
let result = my_db.run_command(doc! { "hello": 1 }).await?;
checkMetadataConsistency
命令返回多个结果文档。您可以使用run_cursor_command()
方法运行此命令并收集结果,如下所示:
let cursor = my_db .run_cursor_command(doc! { "checkMetadataConsistency": 1 }) .await?;
要查找数据库命令及其对应参数的完整列表,请参阅附加信息部分。
注意
读取偏好
run_command()
和run_cursor_command()
方法不遵循您可能在代码中其他地方设置的读取偏好。默认情况下,它们使用primary
读取偏好。
您可以通过将selection_criteria()
方法链式连接到run_command()
或run_cursor_command()
来设置命令执行的读取偏好。以下代码展示了如何在SelectionCriteria
实例中指定读取偏好并将其作为参数传递给selection_criteria()
方法。
let result = my_db .run_command(doc! { "hello": 1 }) .selection_criteria(SelectionCriteria::ReadPreference(ReadPreference::Primary)) .await?;
要为run_cursor_command()
方法设置读取偏好,请使用与前面的示例相同的语法。
有关读取偏好的更多信息,请参阅服务器手册中的读取偏好。
响应
run_command()
方法返回一个包含执行命令后数据库响应的Document
对象。而run_cursor_command()
返回一个引用多个结果文档的Cursor
。
每个数据库命令执行不同的功能,因此响应内容可能因执行的命令而异。然而,每个响应都包含以下字段的文档:
字段 | 描述 |
---|---|
<command result> | 特定于数据库命令的字段。例如, count 返回n 字段,而explain 返回queryPlanner 字段。 |
ok | 命令是否成功( 1 )或失败(0 )。 |
operationTime | 操作的逻辑时间。MongoDB使用逻辑时间来排序操作。 有关逻辑时间的更多信息,请参阅我们关于全局逻辑时钟的博客文章。 |
$clusterTime | 包含已签名的集群时间的文档。集群时间是一种用于操作排序的逻辑时间。 该文档包含以下字段
|
命令示例
以下代码显示了如何使用 run_command()
方法在 plants
数据库的 flowers
集合上运行 count
操作的 explain
命令。 explain
命令在 "queryPlanner"
详细模式中运行
let my_db = client.database("plants"); let count_command = doc! { "count": "flowers" }; let explain_command = doc! { "explain": count_command, "verbosity": "queryPlanner" }; let result = my_db.run_command(explain_command).await?;
输出
输出包括解释 count
操作的字段,例如由查询优化器选择的获胜计划(plan)以及任何被拒绝的计划。输出还包含关于 explain
命令执行的详细信息
{ "$clusterTime": { "clusterTime": { "T": 1673969525, "I": 24 }, "signature": {...} }, "command": { "$db": "plants", "count": "flowers" }, "explainVersion": "1", "ok": 1, "operationTime": { "T": 1673969525, "I": 24 }, "queryPlanner": { "indexFilterSet": false, "maxIndexedAndSolutionsReached": false, "maxIndexedOrSolutionsReached": false, "maxScansToExplodeReached": false, "namespace": "plants.flowers", "rejectedPlans": [], "winningPlan": { "stage": "RECORD_STORE_FAST_COUNT" } }, "serverInfo": {...}, "serverParameters": { "internalDocumentSourceGroupMaxMemoryBytes": 104857600, ... } }
更多信息
有关本指南中概念的相关信息,请参阅服务器手册中的以下文档