Overview
このページでは、PyMongo の新しいバージョンにアップグレードするときにアプリケーションに加える必要がある変更について説明します。
重要
このガイドには、v 以降のPyMongoバージョンのみに対する重大な変更が含まれています。4.0 PyMongo v2 または v3 からアップグレードする場合は、「 PyMongo4 移行ガイド 」を参照してください。
アップグレードする前に、次のアクションを実行してください。
新しいPyMongoバージョンが、アプリケーションが接続するMongoDB Serverのバージョンおよびアプリケーションを実行するPythonバージョンと互換性があることを確認します。バージョンの互換性情報については、互換性ページを参照してください。
アプリケーションが使用しているドライバー バージョンとアップグレード予定のバージョンとの間の重大な変更については、重大な変更セクションを参照してください。
Tip
将来ドライバーのバージョンをアップグレードする際にアプリケーションに必要な変更数を最小限に抑えるには、 Stable API を使用します。
非推奨警告の表示
非推奨の PyMongo 機能を使用する場合、ドライバーはDeprecationWarningを発生させます。 デフォルトでは、Python インタープリタはこれらの警告を無視します。 これらをstderrに出力するには、 -Wdオプションを使用して Python を起動します。
次の例では、非推奨の メソッドを呼び出す Python アプリケーションであるinsert.pyを実行します。 Python が-Wdオプションで開始されていたため、インタプリタはDeprecationWarningを表示します。
$ python3 -Wd insert.py insert.py:4: DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead. client.test.test.insert({})
DeprecationWarningメッセージを例外として扱うには、次の例に示すように、代わりに-Weオプションを使用して Python を起動します。
$ python3 -We insert.py Traceback (most recent call last): File "insert.py", line 4, in <module> client.test.test.insert({}) File "/home/durin/work/mongo-python-driver/pymongo/collection.py", line 2906, in insert "instead.", DeprecationWarning, stacklevel=2) DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.
重大な変更
重大な変更とは、ドライバーの特定のバージョン以降の規則または動作の変更です。 このタイプの変更では、ドライバーをアップグレードする前に対処しないと、アプリケーションが正常に動作しなくなる可能性があります。
このセクションの重大な変更は、それを導入したドライバーのバージョンによって分類されます。 ドライバーのバージョンをアップグレードするときは、現在のバージョンとアップグレードのバージョン間のすべての重大な変更に対処してください。
例
バージョン4.0からのアップグレード
PyMongo を v 4.0から v 4.7にアップグレードする場合は、バージョン4.1から4.7にリストされているすべての重大な変更に対処します。
バージョン4.18 重大な変更
MongoDB Server v4.2 のサポートを削除します。 サポートされるMongoDB Server の最小バージョンは v4.4 になりました。
集計ヘルパーメソッドでは、
aggregateまたはpipelineのキーワード引数を渡すとpymongo.errors.ConfigurationErrorが発生します。以前は、これらのキーは、生成されたaggregateコマンドのターゲット名前空間とパイプラインを暗黙的に置き換えました。この変更は、同期クラスと非同期クラスの両方の次のメソッドに影響します。Collection.aggregate()Collection.aggregate_raw_batches()Database.aggregate()Collection.list_search_indexes()
1 つの論理操作のコマンド モニタリング イベントとコマンドログメッセージは、その操作のすべての再試行で 1 つの安定版
operation_idを共有します。その結果、これらの操作では、operation_idは試行回数request_idと等しなくなりました。4 KB 以上で、不変バッファから
bson.raw_bson.RawBSONDocumentオブジェクトにデコードされるドキュメントとサブドキュメントは、bytesコピーではなく読み取り専用のmemoryviewスライスとして表示されます。bytearrayなどの可変バッファからデコードされたドキュメントは、常にbytesのコピーであります。bson.get_data_and_view()メソッドは、bytesまたはbytearray以外のバッファ プロトコル入力のプライベートbytesコピーのビューを返します。v7.1 より前の
mongosバージョンに対して exhaust カーソル(CursorType.EXHAUST)を使用すると、ドライバーはfind()メソッドではなく、カーソルの最初の反復でpymongo.errors.InvalidOperationエラーを発生させます。次の理由で、ドライバーは、使用されている接続に対して要件をチェックします。limitとCursorType.EXHAUSTを組み合わせた非同期カーソルでは、最初の反復ではなくfind()メソッドからエラーが発生します。これは同期APIに一致します。
バージョン4.14 重大な変更
MongoDB Server v4.0 のサポートを削除します。 サポートされるMongoDB Server の最小バージョンは v4.2 になりました。
bson.binary.BinaryVectorオブジェクトをエンコードする場合、paddingメタデータフィールドの値は次の条件を満たす必要があります。バイナリ サブタイプが
PACKED_BITの場合、値は 0 から 7 まで(この値を含む)の範囲でなくてはなりません。それ以外の場合、値は 0 である必要があります。
上記の条件が満たされていない場合、 PyMongo は
ValueErrorを発生させます。uri_parser.parse_uri()メソッドのoptionsパラメータのタイプはdictです。以前のバージョンでは、このパラメータは_CaseInsensitiveDictionary型でした。
バージョン4.11 重大な変更
MongoDB Server v3.6 のサポートを削除します。 サポートされるMongoDB Server の最小バージョンは v4.0 になりました。
Python v3.8 のサポートを削除します。 サポートされる最小Pythonバージョンは v3.9 になりました。
PyPy v3.9 のサポートを削除します。 サポートされる PyPy の最小バージョンは v3.10 になりました。
MONGODB-CR認証メカニズムのサポートを廃止します。 認証の詳細については、 認証メカニズム のガイドを参照してください。
バージョン4.9 重大な変更
- アプリケーションで クライアント側フィールドレベル暗号化 (CSFLE) を使用するには、
pymongocryptv1.10 以降を使用する必要があります。
バージョン 4.8 重大な変更
- PyMongo v 4.8のため バックエンド ビルド システムとして
hatchを使用している場合、setup.pyファイルを使用してドライバーをビルドすることはできなくなりました。 代わりに、 pip を使用して PyMongo をインストールする必要があります。 編集可能なインストールの場合は、 pip v 21.3以降を使用する必要があります。
バージョン 4.7 の重大な変更
すべての内部クラスとコマンドでの
SONコレクション タイプのすべての発生がdictに変更されました。options.pool_options.metadataプロパティは、SONdictのタイプになりました。 次のコード例は、これらの形式でのデータ保存方法の違いを示しています。
# Before (SON) from pymongo import MongoClient client = MongoClient() client.options.pool_options.metadata SON([('driver', SON([('name', 'PyMongo'), ('version', '4.7.0.dev0')])), ('os', SON([('type', 'Darwin'), ('name', 'Darwin'), ('architecture', 'arm64'), ('version', '14.3')])), ('platform', 'CPython 3.11.6.final.0')]) # After (dict) client.options.pool_options.metadata {'driver': {'name': 'PyMongo', 'version': '4.7.0.dev0'}, 'os': {'type': 'Darwin', 'name': 'Darwin', 'architecture': 'arm64', 'version': '14.3'}, 'platform': 'CPython 3.11.6.final.0'}
単一レイヤーのdictオブジェクトをSONオブジェクトに変換するには、次の例に示すように、 dictオブジェクトをSONコンストラクターに渡します。
data_as_dict = client.options.pool_options.metadata SON(data_as_dict) SON([('driver', {'name': 'PyMongo', 'version': '4.7.0.dev0'}), ('os', {'type': 'Darwin', 'name': 'Darwin', 'architecture': 'arm64', 'version': '14.3'}), ('platform', 'CPython 3.11.6.final.0')])
dictオブジェクトに複数のレイヤーがある場合は、次の例に示すように、値を一度に 1 つずつ変換する必要があります。
def dict_to_SON(data_as_dict: dict[Any, Any]): data_as_SON = SON() for key, value in data_as_dict.items(): data_as_SON[key] = dict_to_SON(value) if isinstance(value, dict) else value return data_as_SON >>> dict_to_SON(data_as_dict) SON([('driver', SON([('name', 'PyMongo'), ('version', '4.7.0.dev0')])), ('os', SON([('type', 'Darwin'), ('name', 'Darwin'), ('architecture', 'arm64'), ('version', '14.3')])), ('platform', 'CPython 3.11.6.final.0')])
バージョン 4.2 の重大な変更
Py right ツールのサポートを改善するため、
ClientSessionクラスはジェネリック型を使用しなくなりました。クライアント側フィールドレベル暗号化(CSFLE)には、pymongocrypt v 1.3.0以降が必要です。
BSON 、 PyMongo 、 Grifs パッケージでは、公開 API を宣言するために
__all__変数が使用されるようになりました。 アプリケーションにfrom bson import *ステートメントが含まれている場合は、必要な API が引き続きインポートされていることを確認してください。estimated_document_count()メソッドは常に count コマンドを使用します。 このコマンドは MongoDB バージョン5.0.0の Stable API では使用できません。 から5.0.8まで。 Stable API でestimated_document_count()メソッドを使用する場合は、 MongoDB Server v 5.0にアップグレードする 必要があります。 9以降の または 、pymongo.server_api.ServerApi.strictオプションをFalseに設定します。