Docs 菜单
Docs 主页
/ / /
Rust 驱动程序
/

运行命令

在此页面上

  • Overview
  • 执行命令
  • 响应
  • 命令示例
  • 输出
  • 更多信息
  • API 文档

在本指南中,您可以了解如何使用 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),请使用与前面示例相同的事务语法。

有关读取偏好选项的更多信息,请参阅 MongoDB Server手册中的 读取偏好 。

执行命令后, run_command()方法会返回一个Document对象,其中包含数据库的响应。 run_cursor_command()返回引用多个结果文档的Cursor

每个数据库命令执行不同的功能,因此响应内容可能因执行的命令而异。 但是,每个响应都包含一个包含以下字段的文档:

字段
说明

<command result>

特定于数据库命令的字段。 例如, count返回n字段, explain返回queryPlanner字段。

ok

命令是成功 ( 1 ) 还是失败 ( 0 )。

operationTime

操作的逻辑时间。MongoDB 使用逻辑时间对排序操作。

要了解有关逻辑时间的更多信息,请参阅我们有关全局逻辑时钟的博文。

$clusterTime

包含签名集群时间的文档。 集群时间是用于对操作进行排序的逻辑时间。

该文档包含以下字段:

  • clusterTime,节点的已知最高集群时间的时间戳

  • signature,一份包含集群时间哈希以及用于对集群时间进行签名的密钥 ID 的文档

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

有关本指南中概念的更多信息,请参阅服务器手册中的以下文档:

后退

跟踪和日志记录