Overview
在本指南中,您可以了解如何使用 Rust 驱动程序运行数据库命令。 您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。
本指南包括以下部分:
Execute a Command describes the syntax and behavior of the
run_command()andrun_cursor_command()methods响应描述了命令执行方法返回的信息
命令示例提供命令示例并描述命令的输出
附加信息提供了本指南中提到的类型和方法的资源和 API 文档链接
重要
首选驱动程序方法而非数据库命令
驱动程序为许多数据库命令提供了封装方法。我们建议尽可能使用驱动程序方法,而不是执行数据库命令。
To perform administrative tasks, use the MongoDB Shell instead of the Rust driver. Calling the db.runCommand() method inside the shell is the preferred way to issue database commands, as it provides a consistent interface between the shell and drivers.
执行命令
要运行数据库命令,必须在命令文档中指定该命令和所有相关参数,然后将该命令文档传递给命令执行方法。 Rust 驱动程序提供以下方法来运行数据库命令:
run_command(),将以Document类型返回命令响应。 您可以将此方法与任何数据库命令一起使用。run_cursor_command(),将以可迭代的Cursor类型返回命令响应。 仅当数据库命令返回多个结果文档时,才能使用此方法。
以下代码展示如何使用run_command()方法运行hello命令,该命令会返回有关数据库中副本集中当前成员角色的信息:
let result = my_db.run_command(doc! { "hello": 1 }, None).await?;
checkMetadataConsistency命令返回多个结果文档。 您可以使用run_cursor_command()方法运行此命令并收集结果,如以下代码所示:
let cursor = my_db .run_cursor_command(doc! { "checkMetadataConsistency": 1 }, None) .await?;
To find a link to a full list of database commands and corresponding parameters, see the Additional Information section.
注意
读取偏好
run_command()和run_cursor_command()方法不遵循您可能在代码中其他位置对Database对象设置的读取偏好(read preference)。默认情况下,它们使用primary读取偏好(read preference)。
您可以通过将选项对象传递给任一方法来设置命令执行的读取偏好(read preference)。以下代码展示了如何在实例中指定读取偏好(read preference),并将其作为选项传递给SelectionCriteria run_command()方法:
let command_options = SelectionCriteria::ReadPreference( ReadPreference::Primary ); let result = my_db.run_command(command_doc, command_options).await?;
run_cursor_command()方法将RunCursorCommandOptions实例作为参数。 您可以设置此结构体的字段selection_criteria来选择读取偏好(read preference)。
响应
执行命令后, run_command()方法会返回一个Document对象,其中包含数据库的响应。 run_cursor_command()返回引用多个结果文档的Cursor 。
每个数据库命令执行不同的功能,因此响应内容可能因执行的命令而异。 但是,每个响应都包含一个包含以下字段的文档:
字段 | 说明 |
|---|---|
<command result> | 特定于数据库命令的字段。 例如, |
| 命令是成功 ( |
| 操作的逻辑时间。MongoDB 使用逻辑时间对排序操作。 要了解有关逻辑时间的更多信息,请参阅我们有关全局逻辑时钟的博文。 |
| 包含签名集群时间的文档。 集群时间是用于对操作进行排序的逻辑时间。 该文档包含以下字段:
|
命令示例
以下代码显示如何使用run_command() explaincountflowers方法对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, None).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, ... } }
更多信息
有关本指南中概念的更多信息,请参阅服务器手册中的以下文档: