Docs 菜单
Docs 主页
/ /

运行数据库命令

在本指南中,您可以了解如何使用 Node.js 驱动程序运行数据库命令。您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计数据、初始化副本集或运行聚合管道。

重要

首选驱动程序方法而非数据库命令

驱动程序为许多数据库命令提供了封装方法。我们建议尽可能使用驱动程序方法,而不是执行数据库命令。

要执行管理任务,请使用 MongoDB Shell而不是 Node.js 驱动程序。 在shell内调用 db.runCommand() 方法是发出数据库命令的首选方法,因为它在shell和驱动程序之间提供了一致的接口。

如要运行数据库命令,您必须在文档中指定命令和任何相关的参数,然后将该文档传递给命令执行方法。Node.js 驱动程序提供了以下方法来运行数据库命令:

  • command(),将以Document类型返回命令响应。 您可以将此方法与任何数据库命令一起使用。

  • runCursorCommand(),将以可迭代的RunCommandCursor类型返回命令响应。 仅当数据库命令返回多个结果文档时,才能使用此方法。

以下代码展示如何使用command()方法运行hello命令,该命令会返回有关数据库中副本集中当前成员角色的信息:

const result = await myDB.command({ hello: 1 });

有关数据库命令和相应参数的完整列表,请参阅“其他信息”部分

您可以为command()runCursorCommand()方法指定可选命令行为。

command() 方法接受一个 RunCommandOptions对象。要学习;了解有关 RunCommandOptions 类型的更多信息,请参阅API文档。

runCursorCommand() method 接受一个 RunCursorCommandOptions对象。要学习;了解有关 RunCursorCommandOptions 类型的更多信息,请参阅API文档。

从 Node.js 驱动程序 6.0 版开始,您只能将以下选项传递给command()方法:

  • comment

  • enableUtf8Validation

  • raw

  • readPreference

  • session

您可以在传递给command()方法的文档中设置更多选项。 要了解有关命令及其接受的选项的更多信息,请找到该命令并点击 手册 数据库命令MongoDB Server 部分的链接。

以下代码演示如何指定使用majority写关注(write concern)执行的grantRolesToUser命令:

const commandDoc = {
grantRolesToUser: "user011",
roles: [ "readWrite" ],
writeConcern: { w: "majority" }
};
const result = await myDB.command(commandDoc);

注意

读取偏好

command()runCursorCommand()方法忽略您可能在Db对象上设置的读取偏好设置。 默认情况下,这些方法使用primary读取偏好。

以下代码展示了如何指定读取偏好(read preference)并将其作为选项传递给command()方法:

const commandOptions = { readPreference: "nearest" };
const result = await myDB.command(commandDoc, commandOptions);

有关读取偏好选项的更多信息,请参阅 MongoDB Server手册中的 读取偏好 。

执行命令后,每个方法都会返回一个Document对象或游标,其中包含数据库的响应。 每个数据库命令执行不同的功能,因此响应内容可能因命令而异。 但是,每个响应都包含具有以下字段的文档:

字段
说明

<command result>

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

ok

表明命令是成功(1)还是失败(0)。

operationTime

指示操作的逻辑时间。 MongoDB使用逻辑时间对操作进行排序。 要学习;了解有关逻辑时间的更多信息,请参阅我们有关全局逻辑时钟的博文文。

$clusterTime

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

该文档包含以下字段:

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

  • signature,这是一个文档,其中包含集群时间的哈希值以及用于对集群时间进行签名的密钥的 ID。

以下代码展示了如何使用runCursorCommand()方法在testDB数据库上运行checkMetadataConsistency命令并遍历结果:

// Connect to the "testDB" database
const db = client.db("testDB");
// Run a cursor command to check metadata consistency within the database
const cursor = await db.runCursorCommand({
checkMetadataConsistency: 1,
});
// Iterate through the cursor's results and print the contents
for await (const doc of cursor) {
console.log(doc);
}

输出包含游标对象的内容。这些文档描述了数据库中任何元数据不一致的情况:

{
type: ...,
description: ...,
details: {
namespace: ...,
info: ...
}
}
{
type: ...,
description: ...,
details: {
namespace: ...,
collectionUUID: ...,
maxKeyObj: ...,
...
}
}

注意

如果将命令响应存储在游标中,则在访问游标内容时只能看到命令结果文档。 您不会看到okoperationTime$clusterTime字段。

注意

设置示例

This example connects to an instance of MongoDB by using a connection URI. To learn more about connecting to your MongoDB instance, see the Connect to MongoDB guide. This example also uses the movies collection in the sample_mflix database included in the Atlas sample datasets. You can load them into your database on the free tier of MongoDB Atlas by following the MongoDB Get Started.

注意

无Typescript特定功能

以下代码示例使用JavaScript。驱动程序没有与此使用案例相关的 TypeScript 特定功能。

在以下示例代码中,我们发送 dbStats 命令以从 sample_mflix数据库请求统计信息:

1/* Run a database command */
2
3import { MongoClient } from "mongodb";
4
5// Replace the uri string with your MongoDB deployment's connection string
6const uri = "<connection string uri>";
7
8const client = new MongoClient(uri);
9
10async function run() {
11 try {
12 // Get the "sample_mflix" database
13 const db = client.db("sample_mflix");
14
15 // Find and print the storage statistics for the "sample_mflix" database using the 'dbStats' command
16 const result = await db.command({
17 dbStats: 1,
18 });
19 console.log(result);
20 } finally {
21 // Close the database connection on completion or error
22 await client.close();
23 }
24}
25run().catch(console.dir);

运行上述命令会产生以下输出:

{
db: 'sample_mflix',
collections: 6,
views: 0,
objects: 75620,
..

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

要了解如何从游标检索数据,请参阅从游标访问数据基础知识页面。

后退

索引

在此页面上