Docs Menu

CRUD操作の構成

このガイドでは、 PyMongoで読み取りおよび書込み (write) 操作を構成する方法を学習できます。

読み込み設定( 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コマンドライン オプション を使用します。

PyMongo は、ネットワークまたはサーバーのエラーによって失敗した場合に、特定の読み取りおよび書き込み操作が 1 回自動的に再試行します。

再試行可能な読み取りまたは再試行可能な書込みを明示的に無効にするには、MongoClient() コンストラクターで retryReads または retryWrites オプションを False に設定します。 次の例では、クライアントの再試行可能な読み取りと書込みを無効にします。

client = MongoClient("<connection string>",
retryReads=False, retryWrites=False)

サポートされている再試行可能な読み取り操作の詳細については、 MongoDB Serverマニュアルの「 再試行可能な読み取り 」を参照してください。サポートされている再試行可能な書込み操作の詳細については、 MongoDB Serverマニュアルの「 再試行可能な書込み 」を参照してください。

コレクションを作成すると、コレクションに対して実行するすべての操作のデフォルトの照合を指定できます。

次の例では、 前の例と同じコレクションを作成していますが、デフォルトの照合は fr_CA です。

from pymongo.collation import Collation
database = client["test_database"]
database.create_collection("example_collection", collation=Collation(locale='fr_CA'))