Overview
このガイドでは、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 つのドキュメントの検索
コレクション内の 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 | 説明 |
---|---|
| Limits the number of documents to hold in a cursor at a given time. |
| The collation options for the find operation. See the Collation
guide for more information. |
| 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. |
| The index to use for the query. |
| 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 ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。