Docs Menu

Docs Homeアプリケーションの開発Python ドライバーPyMongo

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

項目一覧

  • Overview
  • データベースへのアクセス
  • コレクションにアクセスする
  • コレクションを作成する
  • コレクションの一覧を取得する
  • コレクションの削除
  • 読み取り操作と書込み操作の設定
  • タグセット
  • LocalThreshold
  • トラブルシューティング
  • AutoReconnect エラー
  • API ドキュメント

このガイドでは、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"というコレクションを作成しています。

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

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

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

次の例では、 list_collections()メソッドを呼び出し、カーソルを反復処理して結果を出力します。

collection_list = 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)

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

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

次の例では、 test_collectionコレクションを削除しています。

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

警告

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

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

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

読み込み設定( read preference ) を設定することで、ドライバーが読み取り操作をルーティングする方法を制御できます。 また、読み取り保証 ( read concern ) と書込み保証 ( write concern ) を設定して、ドライバーがレプリカセットでの読み取りおよび書込み (write) 操作の確認を待機する方法のオプションも制御できます。

デフォルトでは、データベースはMongoClientインスタンスからこれらの設定を継承し、コレクションは データベースからこれらを継承します。 ただし、次のいずれかの方法を使用して、データベースまたはコレクションのこれらの設定を変更できます。

  • get_database(): データベースを取得し、クライアントの読み込み設定(read preference)、読み取り保証(read concern)、書込み設定(write preference)を適用します。

  • database.with_options(): データベースを取得し、現在の読み込み設定(read preference)、読み取り保証(read concern)、書込み設定(write preference)を適用します。

  • get_collection(): コレクションを取得し、その現在の読み込み設定(read preference)、読み取り保証(read concern)、書込み設定(write preference)を適用します。

  • collection.with_options(): コレクションを取得し、データベースの読み込み設定(read preference)、読み取り保証(read concern)、書込み設定(write preference)を適用します。

前述のメソッドを使用して読み取りまたは書込み設定を変更するには、 メソッドを呼び出して、コレクションまたはデータベース名と新しい読み込み設定(read preference)、読み取り保証(read concern)、または書込み設定(write preference)を渡します。

次の例では、 get_database()メソッドを使用して、 test-databaseというデータベースの読み取り設定、読み取り保証、書込み設定を変更する方法を示しています。

client.get_database("test-database",
read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

次の例では、 get_collection()メソッドを使用して、 test-collectionというコレクションの読み取りおよび書込み設定を変更する方法を示します。

database.get_collection("test-collection",
read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

次の例では、 with_options()メソッドを使用して、 test-collectionというコレクションの読み取りおよび書込み設定を変更する方法を示します。

collection.with_options(read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

Tip

列挙型で使用できる読み込み設定(read preference)の種類を確認するには、ReadPreference API ドキュメント を参照してください。

読み取りおよび書込み設定の詳細については、MongoDB Server マニュアルの次のガイドを参照してください。

MongoDB Server では、選択した任意の基準に従ってレプリカセット メンバーにキーと値のタグを適用できます。 次に、それらのタグを使用して、1 つ以上のノードを読み取り操作の対象にすることができます。

デフォルトでは、PyMongo は読み取りノードを選択する際にタグを無視します。 特定のタグを優先するように PyMongo に指示するには、それらを 読み込み設定( read preference)クラス のパラメーターとして渡します。 コンストラクター。

次のコード例では、 read_preferenceパラメーターに渡されるタグセットは、PyMongo に対して、ニューヨーク データセンター( 'dc': 'ny' )からの読み取りを優先し、サンフランシスコ データセンター( 'dc': 'sf' )にフォールバックするように指示します。

db = client.get_database(
'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))

指定した読み込み設定(read preference)とタグセットと一致するレプリカセット ノードが複数ある場合、PyMongo は ping 時間に応じて選択された、最も近いレプリカセット ノードから読み取ります。

デフォルトでは、ドライバーは ping 時間が最も近いメンバーの15ミリ秒以内であるメンバーのみをクエリに使用します。 より高いレイテンシを持つメンバー間で読み取りを分散するには、 localThresholdMSオプションをMongoClient()コンストラクターに渡します。

次の例えでは、 35ミリ秒のローカルしきい値を指定します。

client = MongoClient(replicaSet='repl0',
readPreference=ReadPreference.SECONDARY_PREFERRED,
localThresholdMS=35)

前の例では、PyMongo はノードの ping 時間の35ミリ秒以内に、一致するノード間で読み取りを分散します。

注意

PyMongo は、 mongosインスタンスを介してレプリカセットと通信する場合、 localThresholdMSの値を無視します。 この場合は、 localThresholdコマンドライン オプション を使用します。

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

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

← MongoDB Server実行時間の制限