AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
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

ReadPreference列挙で使用可能な読み込み設定(read preference)の種類を確認するには、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) を持つレプリカセットに接続すると、ドライバーはレイテンシーウィンドウ内の最も近い適格なレプリカセットから読み込みます。シャーディングされたクラスターに接続すると、ドライバーはレイテンシーウィンドウ内のアクセス可能なすべての mongos インスタンスから選択します。読み込み設定 (read preference) モードの詳細については、「読み込み設定 (read preference)」を参照してください。

デフォルトで、ドライバーは最も近い適格なサーバーの ping 時間が 15 ミリ秒以内であるサーバーのみを使用します。

例えば、レプリカセットに 5 つのノードがあり、最も近いノードの ping 時間が 5 ミリ秒であるとします。デフォルトの localThresholdMS が 15 ミリ秒の場合、次の表に示すように、ping 時間が 20 ミリ秒以下のノードのみがレイテンシ ウィンドウ内にあります。

Host
タイプ
ping 時間
レイテンシ ウィンドウ内

host1

原発

5ミリ秒

はい

host2

セカンダリ

9ミリ秒

はい

host3

セカンダリ

13ミリ秒

はい

host4

セカンダリ

24ミリ秒

No

host5

セカンダリ

42ミリ秒

No

レイテンシウィンンドウを調整するには、MongoClient() コンストラクターに localThresholdMS オプションを渡します。

次の例では、35 ミリ秒のローカルしきい値を指定します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

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

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

注意

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

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

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

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

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

サーバーが過負荷エラーを返したときにPyMongo が操作をどのように処理するかを設定するには、次のクライアントオプションを使用します。

  • enable_overload_retargeting: ドライバーが過負荷エラーを返すサーバーの優先順位を下げ、同じ過負荷サーバーで再試行する可能性を減らします。デフォルト値は False です。

  • max_adaptive_retries:サーバーが過負荷エラーを返した場合にドライバーが操作を再試行する最大回数を指定します。デフォルト値は 2 です。

次の例では、MongoClient を作成し、過負荷再試行オプションを構成しています。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

client = MongoClient("<connection string>",
enable_overload_retargeting=True,
max_adaptive_retries=3)
client = AsyncMongoClient("<connection string>",
enable_overload_retargeting=True,
max_adaptive_retries=3)

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

照合は、大文字と小文字やアクセント記号など、string を比較するための言語固有のルールのセットです。

照合を指定するには、CollationクラスまたはPython辞書のインスタンスを作成します。Collation コンストラクターに渡すオプション、または辞書のキーとして含めるオプションのリストについては、 MongoDB Serverマニュアルの 照合 を参照してください。

Tip

照合のインポート

Collationクラスのインスタンスを作成するには、pymongo.collation からインポートする必要があります。

次の例では、 前の例と同じコレクションを作成していますが、デフォルトの照合は fr_CA です。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

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