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

データベースとコレクション

このガイドでは、PyMongo で MongoDB のデータベースとコレクションを使用する方法を学習できます。

MongoDB では、データは次のレベルの階層に整理されています。

  • データベース: MongoDB インスタンス内の最上位のデータ組織。

  • コレクション: MongoDB はドキュメントをコレクションに保存します。 関係データベースのテーブルに類似しています。

  • ドキュメント: string 、数値、日付などのリテラル データ、およびその他の埋め込みドキュメントが含まれます。

ドキュメント フィールドのタイプと構造の詳細については、 マニュアルの ドキュメントMongoDB Server ガイドを参照してください。

MongoClientインスタンスで辞書形式のアクセスを使用してデータベースにアクセスします。

次の例えではtest_databaseという名前のデータベースにアクセスします。

database = client["test_database"]

データベースのインスタンスで辞書スタイルのアクセスを使用してコレクションにアクセスします。

次の例では、 test_collection という名前のコレクションにアクセスします。

database = client["test_database"]
collection = database["test_collection"]

Tip

指定されたコレクション名がデータベースにまだ存在しない場合、MongoDB は最初にデータを挿入するときに暗黙的にコレクションを作成します。

MongoDB database にコレクションを明示的に作成するには、 create_collection()メソッドを使用します。

次の例では、example_collection というコレクションを作成しています。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

database = client["test_database"]
database.create_collection("example_collection")
database = client["test_database"]
await database.create_collection("example_collection")

キーワード引数として渡すことで、最大サイズやドキュメント検証ルールなどのコレクションオプションを指定できます。 オプションのパラメーターの完全なリストについては、「 create_collection() APIドキュメント 」を参照してください。

時系列コレクションは一定期間にわたる測定値のシーケンスを効率的に保存します。次の例では、ドキュメントの時間フィールドが timestamp と呼ばれる example_ts_collection という時系列コレクションを作成します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

database = client["test_database"]
database.create_collection("example_ts_collection", timeseries={"timeField": "timestamp"})
database = client["test_database"]
await database.create_collection("example_ts_collection", timeseries={"timeField": "timestamp"})

PyMongoで時系列データを使用する方法の詳細については、「 時系列データガイド 」を参照してください。

指定されたメモリ サイズまたはドキュメント数を超えて増えることのない、Cappedコレクションを作成できます。次の例では、最大サイズが 1000 バイトの example_capped_collection という名前のCappedコレクションを作成します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

database = client["test_database"]
database.create_collection("example_capped_collection", capped=True, size=1000)
database = client["test_database"]
await database.create_collection("example_capped_collection", capped=True, size=1000)

Capped コレクションの詳細については、 MongoDB Serverマニュアルの「 Capped コレクション 」を参照してください。

list_collections()メソッドを呼び出すと、データベース内のコレクションのリストをクエリできます。 メソッドは、データベース内のすべてのコレクションとそれに関連するメタデータを含むカーソルを返します。

次の例では、list_collections() メソッドを呼び出し、カーソルを反復処理して結果を出力します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

database = client["test_database"]
collection_list = database.list_collections()
for c in collection_list:
print(c)
database = client["test_database"]
collection_list = await database.list_collections()
for c in collection_list:
print(c)

データベース内のコレクションの名前のみをクエリするには、次のようにlist_collection_name()メソッドを呼び出します。

collection_list = database.list_collection_names()
for c in collection_list:
print(c)
collection_list = await database.list_collection_names()
async for c in collection_list:
print(c)

カーソルの反復処理の詳細については、「 カーソルからデータにアクセスする 」を参照してください。

データベースからコレクションを削除するには、 drop_collection()メソッドを使用します。

次の例では、test_collectionコレクションを削除しています。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

collection = database["test_collection"]
collection.drop()
collection = database["test_collection"]
await collection.drop()

警告

コレクションを削除すると、コレクション内のすべてのデータが削除されます

データベースからコレクションを削除すると、そのコレクション内のすべてのドキュメントとすべてのインデックスが永続的に削除されます。

コレクション内のデータが不要になった場合にのみコレクションを削除します。

アプリケーションでPython3.5 以降を使用している場合は、 PHP で説明されているように、 型のヒント 484をコードに追加できます。型のヒントは、変数、パラメータ、関数の戻り値のデータ型とドキュメントの構造を示します。一部の IDE では、 型ヒント を使用してコードの型エラーをチェックし、コード完了のための適切なオプションを提案できます。

注意

Python 3.7 以前の TypedDiction

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

データベース内のすべてのドキュメントが明確に定義されたスキーマと一致する場合は、ドキュメントの構造を表すためにPythonクラスを使用する型のヒントを指定できます。このクラスをDatabaseオブジェクトの型のヒントに含めることで、保存または検索するすべてのドキュメントが必要な構造を持つようになります。これにより、デフォルトのDict[str, Any] 型よりも正確な型チェックとコード完了が提供されます。

まず、データベースのドキュメントを表すクラスを定義します。クラスはTypedDictクラスから継承し、データベース内のドキュメントと同じフィールドを含む必要があります 。クラスを定義した後、Database 型ヒントのジェネリック型としてその名前を含めます。

次の例では、Movieクラスを定義し、それを Database 型ヒントのジェネリック型として使用します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

from typing import TypedDict
from pymongo import MongoClient
from pymongo.database import Database
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
database: Database[Movie] = client["test_database"]
from typing import TypedDict
from pymongo import AsyncMongoClient
from pymongo.asynchronous.database import Database
class Movie(TypedDict):
name: str
year: int
client: AsyncMongoClient = AsyncMongoClient()
database: Database[Movie] = client["test_database"]

Collection 型ヒントにジェネリック型を追加する方法は、Database 型ヒントにジェネリック型を追加するのと同様です。まず、TypedDictクラスから継承し、コレクション内のドキュメントの構造を表すクラスを定義します。次に、次の例に示すように、Collection 型ヒントのジェネリック型としてクラス名を含めます。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

from typing import TypedDict
from pymongo import MongoClient
from pymongo.asynchronous.collection import Collection
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
database = client["test_database"]
collection: Collection[Movie] = database["test_collection"]
from typing import TypedDict
from pymongo import AsyncMongoClient
from pymongo.collection import Collection
class Movie(TypedDict):
name: str
year: int
client: AsyncMongoClient = AsyncMongoClient()
database = client["test_database"]
collection: Collection[Movie] = database["test_collection"]

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]]``

読み込み設定(read preference)でtag-setsを指定しており、MongoDB が指定されたタグを持つレプリカセット メンバーを見つけられない場合は、このエラーが表示されます。 このエラーを回避するには、タグセット リストの最後に空の辞書( {} )を含めます。 これにより、一致するタグが見つからない場合は、読み取り参照モードに一致するノードから読み取るように PyMongo に指示します。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

接続プール

項目一覧

  • Overview
  • データベースへのアクセス
  • コレクションにアクセスする
  • コレクションを作成する
  • 時系列コレクション
  • 上限付きコレクション
  • コレクションの一覧を取得する
  • コレクションの削除
  • 型ヒント
  • Database
  • コレクション
  • トラブルシューティング
  • クライアント タイプの注釈
  • 互換性のないタイプ
  • AutoReconnect エラー
  • API ドキュメント