Docs 菜单
Docs 主页
/ / /
pymongo

运行数据库命令

在此页面上

  • Overview
  • 执行命令
  • 命令游标
  • 命令示例
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何使用PyMongo运行数据库命令。 您可以使用数据库命令执行各种管理和诊断任务,例如获取服务器统计信息、初始化副本集或运行聚合管道。

重要

首选库方法而非数据库命令

该库为许多数据库命令提供了包装器方法。 我们建议尽可能使用这些方法,而不是执行数据库命令。

要执行管理任务,请使用MongoDB Shell PyMongoMongoDB Shell而不是PyMongo 。shellShell提供了驾驶员中可能不可用的辅助方法。

如果库或Shell中没有可用的助手,则可以使用shell db.runCommand()shellShell方法或驱动程序的command() 方法,如本指南中所述。

您可以使用 command() 方法运行数据库命令。您必须指定命令和所有相关参数。 如果命令很简单,则可以将其作为字符串传递。 否则,它们可以作为 dict对象传递。该方法将返回所运行命令的结果。

以下代码展示如何在 Database 上使用 command() 方法来运行hello 命令,该命令会返回有关服务器的信息:

database = client.get_database("my_db")
hello = database.command("hello")
print(hello)
{
'topologyVersion': {
'processId': ObjectId('6724d211d6b98fa1931e8616'),
'counter': 6
},
'hosts': ['cluster0-shard-00-00.fxoii.mongodb.net:27017',
'cluster0-shard-00-01.fxoii.mongodb.net:27017',
'cluster0-shard-00-02.fxoii.mongodb.net:27017'],
'setName': 'atlas-13l6uw-shard-0',
'setVersion': 114,
'isWritablePrimary': True,
'secondary': False,
'primary': 'cluster0-shard-00-02.fxoii.mongodb.net:27017',
'tags': {
'workloadType': 'OPERATIONAL',
'diskState': 'READY',
'region': 'US_EAST_1',
'provider': 'AWS',
'nodeType': 'ELECTABLE',
'availabilityZone': 'use1-az5'
},
'me': 'cluster0-shard-00-02.fxoii.mongodb.net:27017',
'electionId': ObjectId('7fffffff00000000000000e3'),
'lastWrite': {
'opTime': {
'ts': Timestamp(1730486145, 22),
't': 227
},
'lastWriteDate': datetime.datetime(2024, 11, 1, 18, 35, 45),
'majorityOpTime': {
'ts': Timestamp(1730486145, 22),
't': 227
},
'majorityWriteDate': datetime.datetime(2024, 11, 1, 18, 35, 45)
},
'maxBsonObjectSize': 16777216,
'maxMessageSizeBytes': 48000000,
'maxWriteBatchSize': 100000,
'localTime': datetime.datetime(2024, 11, 1, 18, 35, 45, 309000),
'logicalSessionTimeoutMinutes': 30,
'connectionId': 23889,
'minWireVersion': 0,
'maxWireVersion': 21,
'readOnly': False,
'ok': 1.0,
'$clusterTime': {
'clusterTime': Timestamp(1730486145, 22),
'signature': {
'hash': b"\x1a\xf7{>q%F\xc2\x89\x15\x13W29\x91\xaae'~\xe4",
'keyId': 7379292132843978793
}
},
'operationTime': Timestamp(1730486145, 22)
}

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

command() 方法返回所运行命令的结果。您还可以使用cursor_command() 方法,该方法发出MongoDB命令并将响应解析为 CommandCursorCommandCursor 可用于迭代命令结果。

以下示例在 sample_mflix数据库上使用 cursor_command() 方法。它对 movies集合运行 find 命令,以按 runtime字段值为 11 的文档进行过滤。

database = client.get_database("sample_mflix")
result = database.cursor_command("find", "movies", filter={"runtime": 11})
print(result.to_list())
{
'_id': ObjectId('573a1390f29313caabcd42e8'),
'runtime': 11,
'title': 'The Great Train Robbery',
...
},
{
{'_id': ObjectId('573a1394f29313caabce0f10'),
'runtime': 11,
'title': 'Glas',
...
},
...

要学习;了解命令的响应格式,请参阅数据库命令。

注意

读取偏好

command()cursor_command() 方法不遵循您可能在代码中其他位置对 Database实例设立的读取偏好(read preference)。如果使用 session参数提供 ClientSession,并且此会话位于ACID 事务中,则命令的读取偏好(read preference)将设立为事务的读取偏好(read preference)。否则,该命令的读取偏好(read preference)默认为 PRIMARY

您可以使用 read_preference 参数设立命令执行的读取偏好(read preference),如以下代码所示:

from pymongo.read_preferences import Secondary
database = client.get_database("my_db")
hello = database.command("hello", read_preference=Secondary())
print(hello)

read_preferences请参阅API文档,了解详情有关 模块的更多信息。

要学习;了解有关读取偏好(read preference)选项的更多信息,请参阅MongoDB Server手册中的读取偏好

以下示例使用command()方法运行dbStats命令,以检索sample_mflix数据库的存储统计信息:

database = client.get_database("sample_mflix")
result = database.command("dbStats")
print(result)
{'db': 'sample_mflix', 'collections': 9, 'views': 1, 'objects': 67662,
'avgObjSize': 1796.788182436227, 'dataSize': 121574282, 'storageSize': 97779712,
'totalFreeStorageSize': 0, 'numExtents': 0, 'indexes': 13, 'indexSize': 19423232,
'indexFreeStorageSize': 0, 'fileSize': 0, 'nsSizeMB': 0, 'ok': 1}

此命令的输出包括有关数据库中集合的信息,并描述跨集合存储的数据量和大小。

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

有关 command()cursor_command() 方法的更多信息,请参阅以下PyMongo API文档:

后退

监控数据变化