Docs Menu
Docs Home
/ / /
Pymongo ドライバー

データベースコマンドの実行

項目一覧

  • Overview
  • コマンドの実行
  • コマンドカーソル
  • コマンドの例
  • 型ヒント
  • トラブルシューティング
  • クライアント タイプの注釈
  • 互換性のないタイプ
  • 詳細情報
  • API ドキュメント

このガイドでは、 PyMongoを使用してデータベースコマンドを実行する方法を学習できます。 データベースコマンドを使用して、サーバー統計の取得、レプリカセットを初期化、集計パイプラインの実行中など、さまざまな管理および診断タスクを実行できます。

重要

データベース コマンドよりもライブラリ メソッドを優先

ライブラリは、多くのデータベースコマンドのラッパーメソッドを提供します。 可能な場合は、データベースコマンドを実行する代わりにこれらのメソッドを使用することをお勧めします。

管理タスクを実行するには、 PyMongoの代わりに MongoDB Shell を使用します。shellシェルは、ドライバーでは使用できない可能性のあるヘルパーメソッドを提供します。

ライブラリまたはシェルに使用できるヘルパーがない場合は、このガイドで説明されている {0 シェルメソッドまたはドライバーのshell メソッドを使用できます。db.runCommand()shellcommand()

command() メソッドを使用してデータベースコマンドを実行できます。コマンドと関連する引数を指定する必要があります。 コマンドが単純な場合、これらは string として渡すことができます。 それ以外の場合は、dictオブジェクトとして渡すことができます。メソッドは、実行されたコマンドの結果を返します。

次のコードは、Databasecommand() メソッドを使用して hello コマンドを実行する方法を示しています。これは、サーバーに関する情報を返します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

database = client.get_database("my_db")
hello = database.command("hello")
print(hello)
{
'topologyVersion': {
'processId': ObjectId('...'),
'counter': 6
},
'hosts': [...],
'setName': '...',
'setVersion': 114,
'isWritablePrimary': True,
'secondary': False,
'primary': '...',
'tags': {...},
'me': '...',
'electionId': ...,
'lastWrite': {...},
'maxBsonObjectSize': 16777216,
'maxMessageSizeBytes': 48000000,
'maxWriteBatchSize': 100000,
'localTime': ...,
'logicalSessionTimeoutMinutes': 30,
'connectionId': ...,
'minWireVersion': 0,
'maxWireVersion': 21,
'readOnly': False,
'ok': 1.0,
'$clusterTime': {...},
'operationTime': ...
}
database = client.get_database("my_db")
hello = await database.command("hello")
print(hello)
{
'topologyVersion': {
'processId': ObjectId('...'),
'counter': 6
},
'hosts': [...],
'setName': '...',
'setVersion': 114,
'isWritablePrimary': True,
'secondary': False,
'primary': '...',
'tags': {...},
'me': '...',
'electionId': ...,
'lastWrite': {...},
'maxBsonObjectSize': 16777216,
'maxMessageSizeBytes': 48000000,
'maxWriteBatchSize': 100000,
'localTime': ...,
'logicalSessionTimeoutMinutes': 30,
'connectionId': ...,
'minWireVersion': 0,
'maxWireVersion': 21,
'readOnly': False,
'ok': 1.0,
'$clusterTime': {...},
'operationTime': ...
}

データベースコマンドと対応するパラメータの完全なリストについては、「追加情報 」セクションを参照してください。

command() メソッドは、実行されたコマンドの結果を返します。また、cursor_command() MongoDBコマンドを発行し、その応答を コマンドCursor として解析する メソッドを使用することもできます。CommandCursor はコマンドの結果を反復処理するために使用できます。

次の例では sample_mflixデータベースで cursor_command() メソッドを使用します。 moviesコレクションで find コマンドを実行し、runtimeフィールドの値が 11 のドキュメントをフィルタリングします。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

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

コマンドの応答形式の詳細については、「 データベースコマンド 」を参照してください。

注意

読み込み設定 (read preference)

command() メソッドと cursor_command() メソッドは、コード内の他の場所にある Databaseインスタンスに設定した読み込み設定 (read preference)に従いません。ClientSessionsession パラメータを使用して提供され、かつこのセッションが トランザクション 内にある場合、コマンドの読み込み設定 (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)

read_preferencesAPIドキュメントの モジュールの詳細については、こちらを参照してください。

読み込み設定( 読み込み設定 (read preference) )オプションの詳細については、 MongoDB Serverマニュアルの読み込み設定(read preference) を参照してください。

次の例では、command() メソッドを使用して dbStats コマンドを実行し、sample_mflixデータベースのストレージ統計を取得します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

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}
database = client.get_database("sample_mflix")
result = await 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}

このコマンドの出力には、データベースの コレクション に関する情報が含まれ、コレクション全体に保存されるデータの量とサイズが示されます。

Database.command() メソッドは、返されたBSONドキュメントを特定のクラスのインスタンスにデコードできます。このクラスを指定するには、CodecOptionsオブジェクトを作成し、クラス名を渡します。クラスは次のいずれかのタイプになります。

  • bson.raw_bson.RawBSONDocumentRawBSONDocumentクラスの詳細については、未加工BSONデータの操作 を参照してください。

  • collections.abc.Mapping 型のサブクラス(OrderedDict など)。型チェック ルールの厳密性によっては、キーと値の型を指定する必要がある場合もあります。

  • TypedDict 型のサブクラス。このパラメータに TypedDict サブクラスを渡すには、CodecOptionsオブジェクトの型ヒントにクラスを含める必要があります。

注意

Python 3.7 以前の TypedDiction

TypedDictionクラスは typing モジュールにあります。このモジュールはPython 3.8 以降でのみ利用可能です。Pythonの以前のバージョンで TypedDictクラスを使用するには、 mapping_extentionsパッケージをインストールします。

次の例では、ping コマンドによって返されたBSONを RawBSONDocumentクラスのインスタンスにデコードします。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

from pymongo import MongoClient
from bson.raw_bson import RawBSONDocument
from bson import CodecOptions
client: MongoClient = MongoClient()
options = CodecOptions(RawBSONDocument)
result = client.admin.command("ping", codec_options=options)
from pymongo import AsyncMongoClient
from bson.raw_bson import RawBSONDocument
from bson import CodecOptions
client: AsyncMongoClient = AsyncMongoClient()
options = CodecOptions(RawBSONDocument)
result = await client.admin.command("ping", codec_options=options)

BSON をTypedDictクラスのサブクラスにデコードするには、次の例に示すように、CodecOptions 型のヒントでクラス名を指定します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

from pymongo import MongoClient
from bson.raw_bson import RawBSONDocument
from bson import CodecOptions
from typing import TypedDict
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
options: CodecOptions[Movie] = CodecOptions(Movie)
result = client.admin.command("ping", codec_options=options)
from pymongo import AsyncMongoClient
from bson.raw_bson import RawBSONDocument
from bson import CodecOptions
from typing import TypedDict
class Movie(TypedDict):
name: str
year: int
client: AsyncMongoClient = AsyncMongoClient()
options: CodecOptions[Movie] = CodecOptions(Movie)
result = await client.admin.command("ping", codec_options=options)

MongoClientオブジェクトに型注釈を追加しない場合、型チェッカーに次のようなエラーが表示される場合があります。

from pymongo import MongoClient
client = MongoClient() # error: Need type annotation for "client"

解決策としては、MongoClientオブジェクトを client: MongoClient または client: MongoClient[Dict[str, Any]] として注釈を付けることです。

型のヒントとして MongoClient を指定しているが、ドキュメント、キー、値のデータ型を含めない場合、型チェッカーに次のようなエラーが表示される場合があります。

error: Dict entry 0 has incompatible type "str": "int";
expected "Mapping[str, Any]": "int"

解決策としては、次のタイプのヒントを MongoClientオブジェクトに追加することです。

``client: MongoClient[Dict[str, Any]]``

このガイドの概念の詳細については、 MongoDB Serverマニュアルの次のドキュメントを参照してください。

command() メソッドと cursor_command() メソッドの詳細については、次のPyMongo APIドキュメントを参照してください。

戻る

Indexes