データベースコマンドの実行
Overview
このガイドでは、 PyMongoを使用してデータベースコマンドを実行する方法を学習できます。データベースコマンドを使用して、サーバー統計の取得、レプリカセットを初期化、集計パイプラインの実行中など、さまざまな管理および診断タスクを実行できます。
重要
データベース コマンドよりもライブラリ メソッドを優先
ライブラリは、多くのデータベースコマンドのラッパーメソッドを提供します。 可能な場合は、データベースコマンドを実行する代わりにこれらのメソッドを使用することをお勧めします。
管理タスクを実行するには、 PyMongoの代わりに MongoDB Shellを使用します。 シェルは、ドライバーでは使用できない可能性のあるヘルパーメソッドを提供します。
ライブラリまたはシェルに使用できるヘルパーがない場合は、このガイドで説明されている db.runCommand()
シェルメソッドまたはドライバーのcommand()
メソッドを使用できます。
コマンドの実行
command()
メソッドを使用してデータベースコマンドを実行できます。コマンドと関連する引数を指定する必要があります。コマンドが単純な場合、これらは string として渡すことができます。それ以外の場合は、 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コマンドを発行し、応答を コマンド Cursor として解析する メソッドを使用することもできます。 。CommandCursor
はコマンドの結果を反復処理するために使用できます。
次の例では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', ... }, ...
コマンドの応答形式の詳細については、「データベースコマンド 」を参照してください。
注意
読み込み設定 (read preference)
command()
cursor_command()
メソッドとDatabase
メソッドは、コード内の他の場所にある インスタンスに設定した読み込み設定 (read preference)に従いません。 ClientSession の場合session
は パラメータを使用して提供され、このセッションは トランザクション 内にあります の場合、コマンドの読み込み設定 (read preference)(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)
APIドキュメント の モジュールの詳細については、こちらを参照してください。read_preferences
読み込み設定( 読み込み設定 (read preference) )オプションの詳細については、 MongoDB Serverマニュアルの読み込み設定(read preference) を参照してください。
コマンドの例
次の例では、 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マニュアルの次のドキュメントを参照してください。
API ドキュメント
command()
メソッドとcursor_command()
メソッドの詳細については、次のPyMongo APIドキュメントを参照してください。