运行命令
Overview
在本指南中,您可以了解如何使用 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()
方法不遵循您可能在代码中其他位置对Database
对象设置的读取偏好(read preference)。默认情况下,它们使用primary
读取偏好(read preference)。
您可以通过将selection_criteria()
方法链接到run_command()
或run_cursor_command()
来设立命令执行的读取偏好(read preference)。 以下代码展示了如何在SelectionCriteria
实例中指定读取偏好(read preference)并将其作为参数传递给selection_criteria()
方法:
let result = my_db .run_command(doc! { "hello": 1 }) .selection_criteria(SelectionCriteria::ReadPreference(ReadPreference::Primary)) .await?;
要为run_cursor_command()
方法设立读取偏好(read preference),请使用与前面示例相同的事务语法。
响应
执行命令后, run_command()
方法会返回一个Document
对象,其中包含数据库的响应。 run_cursor_command()
返回引用多个结果文档的Cursor
。
每个数据库命令执行不同的功能,因此响应内容可能因执行的命令而异。 但是,每个响应都包含一个包含以下字段的文档:
字段 | 说明 |
---|---|
<command result> | 特定于数据库命令的字段。 例如, |
| 命令是成功 ( |
| 操作的逻辑时间。MongoDB 使用逻辑时间对排序操作。 要了解有关逻辑时间的更多信息,请参阅我们有关全局逻辑时钟的博文。 |
| 包含签名集群时间的文档。 集群时间是用于对操作进行排序的逻辑时间。 该文档包含以下字段:
|
命令示例
以下代码显示如何使用run_command()
explain
count
flowers
方法对plants
数据库的collection运行 操作的 命令。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
操作执行情况的字段,例如获胜计划(查询优化器选择的计划)以及任何被拒绝的计划。 输出还包含有关执行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, ... } }
更多信息
有关本指南中概念的更多信息,请参阅服务器手册中的以下文档: