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

ドキュメントの検索

このガイドでは、MongoDB 同期 Python ドライバーである PyMongo を使用して、読み取り操作により MongoDB コレクションからデータを検索する方法を学習できます。 find()メソッドまたはfind_one()メソッドを呼び出して、基準のセットに一致するドキュメントを取得できます。

このガイドの例では、 Atlas サンプル データセットsample_restaurants.restaurantsコレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 PyMongo を使い始める 」チュートリアルを参照してください。

PyMongo には、コレクションからドキュメントを取得するための 2 つの方法find_one()find()が含まれています。 これらのメソッドはクエリフィルターを受け取り、1 つ以上の一致するドキュメントを返します。 クエリフィルターは、クエリで検索するドキュメントを指定するオブジェクトです。

クエリフィルターの詳細については、「クエリの指定」を参照してください。

コレクション内の 1 つのドキュメントを検索するには、 find_one()メソッドを呼び出し、検索するドキュメントの基準を指定するクエリフィルターを渡します。 複数のドキュメントがクエリフィルターに一致する場合、このメソッドは検索された結果から最初に一致するドキュメントを Python 辞書として返します。 クエリフィルターに一致するドキュメントがない場合、メソッドはNoneを返します。

Tip

find_one()メソッドは、一致するドキュメントが 1 つしかないことがわかっている場合や、最初の一致のみに該当する場合に便利です。

次の例では、find_one() メソッドを使用して、"cuisine"フィールドの値が "Bakery" である最初のドキュメントを検索します。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

restaurant = sample_restaurants.restaurants.find_one({"cuisine": "Bakery"})
restaurant = await sample_restaurants.restaurants.find_one({"cuisine": "Bakery"})

Tip

並び替え順

ソート条件が指定されていない場合、 find_one()メソッドはディスク上の自然な順序で最初のドキュメントを返します。

並べ替えについて詳しくは、「並べ替えガイド 」を参照してください。

コレクション内の複数のドキュメントを検索するには、検索するドキュメントの基準を指定するクエリフィルターを find() メソッドに渡します。

次の例では、find() メソッドを使用して、"cuisine"フィールドの値が "Spanish" であるすべてのドキュメントを検索します。

cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})

カーソルを使用して、find() メソッドによって返されたドキュメントを反復処理できます。カーソルは、アプリケーションがデータベースの結果を反復処理しながら、特定の時点でメモリ内に結果のサブセットのみを保持できるようにするメカニズムです。カーソルは、find() メソッドが大量のドキュメントを返す場合に便利です。

次の例に示すように、for-in ループを使用して、カーソル内のドキュメントを反復処理できます。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})
for restaurant in cursor:
...
cursor = sample_restaurants.restaurants.find({"cuisine": "Spanish"})
async for restaurant in cursor:
...

注意

すべてのドキュメントの検索

コレクション内のすべてのドキュメントを検索するには、 find()メソッドに空のフィルターを渡します。

all_restaurants = sample_restaurants.restaurants.find({})

メソッドとfind() find_one()メソッドの動作を変更するには、名前付き引数を渡します。次の表では、一般的に使用される引数について説明しています。

Argument
説明

batch_size

特定の時点でカーソルに保持するドキュメントの数を制限します。

collation

検索操作の照合オプション。詳細については、照合 ガイドを参照してください。

comment

クエリに添付する string。これにより、サーバーログとプロファイル データ内の操作を追跡して解釈することができます。クエリ コメントの詳細については、 MongoDB Serverマニュアルの cursor.comment() ページ を参照してください。

hint

クエリに使用するインデックス。

max_time_ms

この操作のサーバー上での最大実行時間。 この時間を超えると、PyMongo は操作を中止し、 ExecutionTimeoutを発生させます。

次の例では、 find()メソッドを使用して、 "cuisine"フィールドの値が"Italian"であるすべてのドキュメントを検索し、最大実行時間を10秒( 10 、 000ミリ秒)に設定しています。

cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000)

使用可能な引数の完全なリストについては、APIドキュメントfind() method参照してください。

クエリを実行するときに、結果をソートするときにドライバーが従う照合を指定できます。

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

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

Tip

照合のインポート

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

次の例では、前の例と同じ検索操作を実行しますが、デフォルトの照合は fr_CA です。

cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000,
collation=Collation(locale="fr_CA"))

あるいは、collation() メソッドを find() メソッドに連結することで照合を指定することもできます。

cursor = sample_restaurants.restaurants.find({"cuisine": "Italian"}, max_time_ms=10000)
.collation(Collation(locale="fr_CA"))

注意

操作照合がデフォルトを上書き

操作の一部として照合を指定すると、コレクションのデフォルトの照合が上書きされます。

検索しようとしたドキュメントが無効または破損している場合、ドライバーは InvalidBSON 例外をスローします。次の例は、InvalidBSON 例外のトラブルシューティングと、コレクション内の無効なドキュメントを見つける方法を示しています。

次の例では、コレクションを反復処理するときに無効なドキュメントを識別する方法を示しています。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

import bson
# Use RawBSONDocument to delay BSON decoding
raw_coll = collection.with_options(
codec_options=collection.codec_options.with_options(
document_class=bson.raw_bson.RawBSONDocument
)
)
# Iterate through documents and check for BSON errors
for doc in raw_coll.find():
try:
bson.decode(doc.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid document {exc}, raw bson: {doc.raw}")
import bson
# Use RawBSONDocument to delay BSON decoding
raw_coll = collection.with_options(
codec_options=collection.codec_options.with_options(
document_class=bson.raw_bson.RawBSONDocument
)
)
# Iterate through documents and check for BSON errors
async for doc in raw_coll.find():
try:
bson.decode(doc.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid document {exc}, raw bson: {doc.raw}")

次の例では、データベースコマンドの応答で無効なBSONを取り扱う方法を示しています。対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

import bson
# Execute command with raw BSON options
res = client.admin.command(
"serverStatus",
codec_options=bson.raw_bson.DEFAULT_RAW_BSON_OPTIONS
)
# Check for BSON errors in the response
try:
bson.decode(res.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid BSON found in serverStatus response {exc}, raw bson: {res.raw}")
import bson
# Execute command with raw BSON options
res = await client.admin.command(
"serverStatus",
codec_options=bson.raw_bson.DEFAULT_RAW_BSON_OPTIONS
)
# Check for BSON errors in the response
try:
bson.decode(res.raw)
except bson.errors.InvalidBSON as exc:
print(f"Invalid BSON found in serverStatus response {exc}, raw bson: {res.raw}")

PyMongoArrow ライブラリを使用すると、 MongoDBクエリの結果セットを Pandas DataFramesNumPy ndarrays、またはApache Arrow テーブルとしてロードできます。PyMongoArrow の詳細については、PyMongoArrow のドキュメントを参照してください。

クエリフィルターの詳細については、「クエリの指定」を参照してください。

PyMongoでドキュメントを取得する実行可能なコード例については、クエリを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。