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

运行命令

本页

  • 概述
  • 执行命令
  • 响应
  • 命令示例
  • 输出
  • 更多信息
  • 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()方法不遵循您可能在代码中其他地方设置的读取偏好。默认情况下,它们使用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

包含已签名的集群时间的文档。集群时间是一种用于操作排序的逻辑时间。

该文档包含以下字段

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

  • signature,包含集群时间哈希和用于签署集群时间的密钥ID的文档

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

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

返回

追踪与日志记录