运行数据库命令
Overview
在本指南中,您可以学习;了解如何使用Scala驾驶员运行数据库命令。您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。
重要
首选驱动程序方法而非数据库命令
驾驶员程序为许多数据库命令提供了包装器方法。如果可能,我们建议使用这些方法,而不是执行数据库命令。
要执行管理任务,请使用 MongoDB Shell而不是Scala驾驶员。 Shell提供了驾驶员中可能不可用的辅助方法。
如果驾驶员或Shell中没有可用的助手,则可以使用 db.runCommand()
Shell方法或驱动程序的 runCommand()
方法,如本指南中所述。
样本数据
sample_restaurants
本指南中的示例使用Atlas示例数据集中的 数据库。要从Scala应用程序访问权限此数据库,请创建一个连接到AtlasMongoClient
集群的 ,并将以下值分配给database
变量:
val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants")
要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
执行命令
要运行数据库命令,请创建指定该命令的 Document
对象,并将其作为参数传递给 runCommand()
方法。此方法返回一个 SingleObservable
实例,您可以订阅此可观察量以执行命令并访问权限命令结果。
以下示例对数据库调用 runCommand()
方法来运行hello
命令,该命令会返回有关服务器的信息:
database.runCommand(Document("hello" -> 1)) .subscribe((doc: Document) => ())
设置读取偏好
runCommand()
方法不会继承您可能在 MongoDatabase
实例上设立的读取偏好(read preference)。默认,runCommand()
使用 primary
读取偏好(read preference)。
您可以通过将 ReadPreference
实例作为参数传递给 runCommand()
设立命令执行的读取偏好(read preference),如以下代码所示:
database.runCommand(Document("hello" -> 1), ReadPreference.secondary()) .subscribe((doc: Document) => ())
提示
要学习;了解有关读取偏好(read preference)选项的更多信息,请参阅MongoDB Server手册中的读取偏好。
响应
runCommand()
方法返回 SingleObservable
,其中包含数据库对给定命令的响应。您可以对可观察量调用 subscribe()
方法来运行命令并以文档形式访问权限响应。
原始命令响应文档包含以下字段:
字段 | 说明 |
---|---|
| 特定于数据库命令的字段。 示例, |
| 指示命令是成功 ( |
| 包含签名集群时间的文档。集群时间是用于对操作进行排序的逻辑时间。此字段仅适用于在副本集或分片集群上运行的命令。 |
| 操作执行的逻辑时间。此字段仅适用于在副本集或分片集群上运行的命令。 |
提示
To 学习;了解 more about logical time, see the Wikipedia entry on the logical clock.
例子
以下示例运行 dbStats
命令来检索sample_restaurants
数据库的存储统计信息,然后打印命令结果:
database.runCommand(Document("dbStats" -> 1)) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
此命令的输出包括数据库中存储的数据的信息,如以下代码所示:
{"db": "sample_restaurants", "collections": 4, "views": 0, "objects": 18767, "avgObjSize": 596.1911866574306, "dataSize": 11188720, "storageSize": 7528448, "totalFreeStorageSize": 0, "numExtents": 0, "indexes": 6, "indexSize": 1519616, "indexFreeStorageSize": 0, "fileSize": 0, "nsSizeMB": 0, "ok": 1}
更多信息
有关本指南中概念的更多信息,请参阅MongoDB Server手册中的以下文档:
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: