运行命令
概述
在本指南中,您可以学习如何使用C++驱动程序运行数据库命令。您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。
重要
优先使用驱动程序方法而非数据库命令
驱动程序为许多数据库命令提供了包装方法。我们建议在可能的情况下使用驱动程序方法而不是执行数据库命令。
要执行管理任务,请使用MongoDB Shell 而不是C++驱动程序。在shell中调用db.runCommand()
方法是发布数据库命令的首选方法,因为它为shell和驱动程序之间提供了一个一致的接口。
执行命令
要运行数据库命令,请在一个 mongocxx::database
实例上调用 run_command()
执行方法,并传入一个指定命令和相关参数的文档。该方法返回命令的结果,作为 bsoncxx::document::value
对象。
您可以使用 run_command()
方法与任何数据库命令。有关数据库命令及其相应参数的完整列表,请参阅MongoDB服务器手册中的 数据库命令。
以下示例展示了如何使用run_command()
方法在数据库上运行hello
命令,该命令返回关于当前成员在副本集中的角色信息。
auto db = client["my_database"]; auto command = make_document(kvp("hello" , 1)); auto result = db.run_command(command.view()); std::cout << bsoncxx::to_json(result) << std::endl;
{ "topologyVersion" : { "processId" : ..., "counter" : ... }, "hosts" : [ ... ], "setName" : ..., "setVersion" : ..., "isWritablePrimary" : ..., "secondary" : ..., "primary" : ..., "tags" : { "region" : ..., "availabilityZone" : ..., "provider" : ..., "workloadType" : ..., "nodeType" : ..., "diskState" : ... }, "me" : ..., "electionId" : ..., "lastWrite" : ..., "lastWriteDate" : ..., "majorityOpTime" : ..., "majorityWriteDate" : ..., "maxBsonObjectSize" : ..., "maxMessageSizeBytes" : ..., "maxWriteBatchSize" : ..., "localTime" : ..., "logicalSessionTimeoutMinutes" : ..., "connectionId" : ..., "minWireVersion" : ..., "maxWireVersion" : ..., "readOnly" : ..., "ok" : ..., "$clusterTime" : ..., "signature" : ... }
命令选项
要自定义命令执行行为,您可以在传递给run_command()
方法的命令文档中设置选项。要了解更多关于某个命令以及它接受哪些选项的信息,请定位该命令并跟随MongoDB服务器手册中数据库命令页面上的相应链接。
例如,您可以将connectionStatus
命令的showPrivileges
选项设置为true
,以在命令文档中指示该命令返回当前认证用户所拥有的全部权限集。
auto db = client["my_database"]; auto command = make_document(kvp("connectionStatus" , 1), kvp("showPrivileges", true)); auto result = db.run_command(command.view()); std::cout << bsoncxx::to_json(result) << std::endl;
{ "authInfo" : { "authenticatedUsers" : [ { "user" : ..., "db" : ... } ], "authenticatedUserRoles" : [ { "role" : ..., "db" : ... } ], "authenticatedUserPrivileges" : [ { "resource" : { "db" : "", "collection" : "" }, "actions" : [ ... ] }, { "resource" : { "db" : "config", "collection" : "system.sessions" }, "actions" : [ ... ] }, ..., { "resource" : { "db" : "", "collection" : "" }, "actions" : [ ... ] } ] }, "ok" : 1 }
响应
run_command()
方法返回一个包含命令执行后数据库响应的bsoncxx::document::value
对象。每个数据库命令执行不同的功能,因此响应内容可能因命令而异。但是,每个响应都包含具有以下字段的文档
字段 | 描述 |
---|---|
<命令结果> | 提供特定于数据库命令的字段。例如, |
| 指示命令是否成功( |
| 指示操作的逻辑时间。MongoDB使用逻辑时间来排序操作。 |
| 提供返回签名集群时间的文档。集群时间是用于操作排序的逻辑时间。 该文档包含以下字段
|
更多信息
有关本指南中概念的其他信息,请参阅以下文档
有关本指南中讨论的方法或类型的更多信息,请参阅以下API文档