对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

运行数据库命令

在本指南中,您可以学习;了解如何使用MongoDB PHP库运行数据库命令。 您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。

重要

首选库方法而非数据库命令

该库为许多数据库命令提供了包装器方法。 我们建议尽可能使用这些方法,而不是执行数据库命令。

To perform administrative tasks, use the MongoDB Shell instead of the MongoDB PHP Library. The shell provides helper methods that might not be available in the library.

如果库或shell中没有可用的助手,则可以使用 db.runCommand() shell方法或库的 MongoDB\Database::command() 方法,如本指南中所述。

要运行数据库命令,必须在命令文档中指定该命令和所有相关参数,然后将该命令文档传递给 MongoDB\Database::command() 方法。许多数据库命令会返回多个结果文档,因此 command() 方法会返回您可以遍历的MongoDB\驱动程序\Cursor对象。

以下代码展示如何在MongoDB\Database实例上使用command()方法来运行hello命令,该命令会返回有关服务器的信息:

$database = $client->selectDatabase('myDB');
$cursor = $database->command(['hello' => 1]);

To find a link to a full list of database commands and corresponding parameters, see the Additional Information section.

注意

读取偏好

command()方法不会继承您可能在代码中其他位置对Database实例设立的读取偏好(read preference)。 默认, command()使用primary读取偏好(read preference)。

您可以通过在 options 参数中设立读取偏好(read preference)来设置命令执行的读取偏好,如以下代码所示:

$readPref = new MongoDB\Driver\ReadPreference('primaryPreferred');
$cursor = $database->command(
['hello' => 1],
['readPreference' => $readPref],
);

有关 ReadPreference 类的了解详情,请参阅PHP扩展API文档。

要学习;了解有关读取偏好(read preference)选项的更多信息,请参阅MongoDB Server手册中的读取偏好。

command()方法返回一个Cursor对象,其中包含数据库对给定命令的响应。 每个数据库命令执行不同的功能,因此响应内容可能会有所不同。

对于返回单个结果文档的命令,该结果可作为游标中的第一个也是唯一一个文档。 对于返回多个结果文档的命令,该库会将原始命令响应中的游标信封(包括游标ID和第批处理结果)转换为可迭代游标。

在运行命令之前,请学习;了解该命令的响应格式,以便应用程序遍历多个结果或提取游标中的第一个也是唯一一个文档。 请参阅本指南的“其他信息”部分,找到数据库命令完整列表的链接。

原始命令响应包含以下字段:

字段
说明

<command result>

特定于数据库命令的字段。 示例, count命令会返回n字段。

ok

命令是成功 (1) 还是失败 (0)。如果ok 字段为 ,则该库会引发 CommandException。0

operationTime

The logical time of the operation. MongoDB uses the logical time to order operations. To learn more about this concept, see our blog post about the Global Logical Clock.

$clusterTime

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

以下示例使用command()方法运行dbStats命令,以检索accounts数据库的存储统计信息:

$database = $client->accounts;
$command = ['dbStats' => 1];
// dbStats returns a single document
$cursor = $database->command($command);
// Print the first document in the cursor
echo json_encode($cursor->toArray()[0]), PHP_EOL;

此命令的输出包括有关数据库中集合的信息,并描述跨集合存储的数据量和大小:

{"db":"accounts","collections":2,"views":0,"objects":5,"avgObjSize":22,"dataSize":110,
"storageSize":40960,"totalFreeStorageSize":0,"numExtents":0,"indexes":2,"indexSize":40960,
"indexFreeStorageSize":0,"fileSize":0,"nsSizeMB":0,"ok":1}

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

有关command()方法的更多信息,请参阅以下MongoDB PHP库API文档: