データベースとコレクション
項目一覧
Overview
このガイドでは、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'}]))
LocalThreshold
指定した読み込み設定(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コマンドライン オプション を使用します。
トラブルシューティング
AutoReconnect
エラー
読み込み設定(read preference)でtag-sets
を指定しており、MongoDB が指定されたタグを持つレプリカセット メンバーを見つけられない場合は、このエラーが表示されます。 このエラーを回避するには、タグセット リストの最後に空の辞書( {}
)を含めます。 これにより、一致するタグが見つからない場合は、読み取り参照モードに一致するノードから読み取るように PyMongo に指示します。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。