文档菜单
文档首页
/ / /
C++ 驱动

运行命令

在本页

  • 概述
  • 执行命令
  • 命令选项
  • 响应
  • 更多信息

在本指南中,您可以学习如何使用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对象。每个数据库命令执行不同的功能,因此响应内容可能因命令而异。但是,每个响应都包含具有以下字段的文档

字段
描述

<命令结果>

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

ok

指示命令是否成功(1)或失败(0)。

operationTime

指示操作的逻辑时间。MongoDB使用逻辑时间来排序操作。

$clusterTime

提供返回签名集群时间的文档。集群时间是用于操作排序的逻辑时间。

该文档包含以下字段

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

  • signature,这是一个包含集群时间哈希和用于签名集群时间的密钥ID的文档。

有关本指南中概念的其他信息,请参阅以下文档

有关本指南中讨论的方法或类型的更多信息,请参阅以下API文档

后退

聚合

© . All rights reserved.