Docs Menu

互換性

次の互換性テーブルは、特定のバージョンの MongoDB で使用するための PyMongo の推奨バージョンを示しています。

最初の列は、ドライバーのバージョンの一覧です。

重要

MongoDB は、MongoDB Serverのサポート終了日(EOL)から 3 年間、MongoDB Server とドライバー間の互換性を確保します。MongoDB のリリースと EOL 日付の詳細については、 MongoDB ソフトウェア ライフサイクル スケジュールを参照してください。

Icon
説明

すべての機能がサポートされています。

ドライバー バージョンは MongoDB バージョンで動作しますが、すべての新しい MongoDB 機能がサポートされているわけではありません。

マークなし

ドライバー バージョンは MongoDB バージョンではテストされていません。

PyMongo のバージョン
MongoDB 8.0
MongoDB 7.0
MongoDB 6.0
MongoDB 5.0
MongoDB 4.4
MongoDB 4.2
MongoDB 4.0
MongoDB 3.6

4.11

4.9から4.10

4.4から4.8

4.2から4.3

3.12から4.1

3.11

3.9から3.10

3.7から3.8

PyMongo は CPython と PyPy の両方をサポートしています。

Python のバージョンがサポート終了(EOL)とマークされると、PyMongo の次のマイナー リリースはそのバージョンのサポートを削除します。 ドライバーは、EOL Python バージョンに対して次の継続的なサポートを提供します。

  • CPython : EOL CPython バージョンと互換性のある最後のマイナーな PyMongo バージョンは 1 年間に重大なバグ修正を受け取ります。

  • PyPy : PyMongo は、EOL 日を超えた PyPy バージョンをサポートしていません。

以下の互換性テーブルは、特定のバージョンの Python で使用するための PyMongo の推奨バージョンを示しています。 最初の列は、ドライバーのバージョンの一覧です。

PyMongo のバージョン
CPython 3.13
CPython 3.12
CPython 3.11
CPython 3.10 [ 1 ]
CPython 3.9
CPython 3.8
CPython 3.7
CPython 3.6
CPython 3.5
CPython 3.4
PyPy3

4.11

4.9から4.10

4.8

4.5から4.7

4.3から4.4

4.2

4.1 [ 2 ]

4.0

3.13

3.12

3.11

3.10

3.7から3.9

[1] Python バージョン3.10以降は、MongoDB 4.0以前のバージョンの TLS/SSL と互換性がありません。 詳細については、トラブルシューティング ガイドの TLSセクションを参照してください。
[2] Pymongo 4.1 には Python 3.6.2 以降が必要です。

互換性テーブルの読み方の詳細については、 「 MongoDB互換性テーブル 」を参照してください。

PyMongoバージョン 3.7 から 3.12 はPython 2.7 およびPython 2.7 と互換性のある代替インタプリタである PyPy と互換性があります。ただし、 Python 2 環境で実行中とPyMongoアプリケーションの動作が異なる場合があります。

次のセクションでは、 PyMongo .を使用する場合のPython 2 とPython 3 の動作の違いについて説明します。

Pythonのすべてのバージョンで、 PyMongo はバイト クラスのインスタンスをバイナリ データとして、サブタイプ のバイナリ0 データとしてエンコードします。これはバイナリ データのデフォルトのサブタイプです。 Python3 では、 PyMongo はこれらの値を:bytes クラスのインスタンスにデコードします。 Python2 では、ドライバーはそれらをサブタイプ を持つ Binaryクラスのインスタンスにデコードします。違いを示すコード例については、 0拡張JSONページ を参照してください。

サブタイプ を持つJSONバイナリ値をデコードする場合、ドライバーは同じように動作します。0 Python3 では、これらの値はbytes クラスのインスタンスにデコードされます。 Python2 では、ドライバーはこれらをサブタイプBinary を持つ0 クラスのインスタンスにデコードします。違いを示すコード例については、 拡張JSONページ を参照してください。

Python 2 で ObjectId を選択し、 Python 3 で選択解除する場合は、pickle.loads() メソッドの引数として encoding='latin-1' を渡す必要があります。

次の例では、Python 3 を使用してPython 2 で選択された ObjectId の選択を解除する方法を示します。

import pickle
pickle.loads(b'<ObjectId byte stream>', encoding='latin-1')

Python 3アプリケーションが互換性のある直列化プロトコルを使用して ObjectId を選択する場合、 Python 2 を使用して選択解除できます。 Python 3 で互換性のあるプロトコルを指定するには、pickle.dumps() メソッドの protocol パラメーターに 0、1、または 2 の値を渡します。

次の例ではPython 3 で ObjectId を選択し、ObjectId と結果の bytesインスタンスを出力します。

import pickle
from bson.objectid import ObjectId
oid = ObjectId()
oid_bytes = pickle.dumps(oid, protocol=2)
print("ObjectId: {}".format(oid))
print("ObjectId bytes: {}".format(oid_bytes))
ObjectId: 67af9b1fae9260c0e97eb9eb
ObjectId bytes: b'\x80\x02cbson.objectid\nObjectId\nq\x00...

次の例では、 前の例から ObjectId のピリオドを解除し、bytes インスタンスと ObjectId インスタンスを出力します。

import pickle
from bson.objectid import ObjectId
oid_bytes = b'\x80\x02cbson.objectid\nObjectId\nq\x00...'
oid = pickle.loads(oid_bytes)
print("ObjectId bytes: {}".format(oid_bytes))
print("ObjectId: {}".format(oid))
ObjectId bytes: b'\x80\x02cbson.objectid\nObjectId\nq\x00)...
ObjectId: 67af9b1fae9260c0e97eb9eb