运行数据库命令
Overview
在本指南中,您可以学习;了解如何使用MongoDB PHP库运行数据库命令。 您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。
重要
首选库方法而非数据库命令
该库为许多数据库命令提供了包装器方法。 我们建议尽可能使用这些方法,而不是执行数据库命令。
要执行管理任务,请使用 MongoDB Shell而不是MongoDB PHP库。 shell提供了库中可能不可用的辅助方法。
如果库或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]);
要查找数据库命令和相应参数的完整列表的链接,请参阅“其他信息”部分。
注意
读取偏好
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 | |
operationTime | 操作的逻辑时间。 MongoDB使用逻辑时间对操作进行排序。 要学习;了解有关此概念的更多信息,请参阅我们有关全局逻辑时钟的博文文。 |
$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手册中的以下文档:
API 文档
有关command()
方法的更多信息,请参阅以下MongoDB PHP库API文档: