Docs Menu
Docs Home
/ / /
Pymongo ドライバー
/ /

ドキュメントの検索

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

このガイドの例では、 Atlas サンプル データセットsample_restaurants.restaurantsコレクションを使用します。 To learn how to create a free MongoDB Atlas cluster and load the sample datasets, see the Get Started with PyMongo tutorial.

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

Limits the number of documents to hold in a cursor at a given time.

collation

The collation options for the find operation. See the Collation guide for more information.

comment

A string to attach to the query. This can help you trace and interpret the operation in the server logs and in profile data. To learn more about query comments, see the cursor.comment() page in the MongoDB Server manual.

hint

The index to use for the query.

max_time_ms

The maximum execution time on the server for this operation. If this time is exceeded, PyMongo aborts the operation and raises an 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")

注意

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

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

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

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

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

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

戻る

クエリを指定する

項目一覧