Retrieve Data
Overview
このガイドでは、MongoDB .NET/C# ドライバーを使用して、読み取り操作により MongoDB コレクションからデータを検索する方法を学習できます。Find()
メソッドを呼び出して、基準のセットに一致するドキュメントを検索できます。
Tip
インタラクティブ ラボ
このページには、 Find()
メソッドを使用してデータを取得する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。
ラボを開始するには、ページ上部の [ Open Interactive Tutorialボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( ⛶ )をクリックします。
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_restaurants.restaurants
コレクションを使用します。 無料の MongoDB Atlas クラスターを作成し、サンプル データセットをロードする方法については、 クイック スタートを参照してください。
このページの例では、次の Restaurant
クラス、Address
クラス、GradeEntry
クラスをモデルとして使用します。
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [ ] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [ ] public double[] Coordinates { get; set; } public string Street { get; set; } [ ] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
注意
restaurants
コレクションのドキュメントは、スニペット ケースの命名規則を使用します。このガイドの例では、ConventionPack
を使用してコレクション内のフィールドをパスカル ケースに逆シリアル化し、Restaurant
クラスのプロパティにマップします。
カスタム直列化について詳しくは、「カスタム直列化」を参照してください。
ドキュメントの検索
コレクションからドキュメントを検索するには、Find()
メソッドを使用します。Find()
メソッドはクエリフィルターを受け取り、一致するすべてのドキュメントを返します。クエリフィルターは、クエリで検索するドキュメントを指定するオブジェクトです。
クエリフィルターの詳細については、「クエリの指定」を参照してください。
1 つのドキュメントの検索
コレクション内の 1 つのドキュメントを検索するには、検索するドキュメントの基準を指定するクエリフィルターを渡し、FirstOrDefault()
メソッドまたは FirstOrDefaultAsync()
メソッドを連鎖させます。複数のドキュメントがクエリフィルターに一致する場合、これらのメソッドは検索した結果から最初に一致するドキュメントを返します。クエリフィルターに一致するドキュメントがない場合、メソッドは null
を返します。
var restaurants = await _restaurantsCollection.Find(filter).FirstOrDefaultAsync();
var restaurants = _restaurantsCollection.Find(filter).FirstOrDefault();
Find()
メソッドを使用して 1 つのドキュメントを検索する完全な例については、「追加情報 」を参照してください。
複数ドキュメントの検索
コレクション内の複数のドキュメントを検索するには、検索するドキュメントの基準を指定するクエリフィルターを Find()
メソッドに渡します。
カーソルを使用して、Find()
メソッドによって返されたドキュメントを反復処理できます。カーソルは、アプリケーションがデータベースの結果を反復処理しながら、特定の時点でメモリ内に結果のサブセットのみを保持できるようにするメカニズムです。カーソルは、Find()
メソッドが大量のドキュメントを返す場合に便利です。
カーソルを使用してドキュメントを反復処理するには、検索するドキュメントの基準を指定するクエリフィルターを Find()
メソッドに渡し、ToCursor()
メソッドまたは ToCursorAsync()
メソッドをチェーンします。同期または非同期の例を表示するには、対応するタブを選択します。
var restaurants = await _restaurantsCollection.Find(filter).ToCursorAsync();
var restaurants = _restaurantsCollection.Find(filter).ToCursor();
返されるドキュメントの数が少ない場合、または結果を List
オブジェクトとして返す必要がある場合は、ToList()
メソッドまたは ToListAsync()
メソッドを使用します。
コレクション内の複数のドキュメントを検索し、それらをリストとしてメモリに保持するには、検索するドキュメントの基準を指定するクエリフィルターを Find()
メソッドに渡し、ToList()
メソッドまたは ToListAsync()
メソッドをチェーンします。同期または非同期の例を表示するには、対応するタブを選択します。
var restaurants = await _restaurantsCollection.Find(filter).ToListAsync();
var restaurants = _restaurantsCollection.Find(filter).ToList();
Find()
メソッドを使用して複数のドキュメントを検索する完全な例については、「追加情報 」を参照してください。
注意
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを検索するには、Find()
メソッドに空のフィルターを渡します。
var filter = Builders<Restaurant>.Filter.Empty; var allRestaurants = _restaurantsCollection.Find(filter);
Find()
メソッドを使用してすべてのドキュメントを検索する完全に実行可能な例については、「追加情報 」を参照してください。
検索動作の変更
FindOptions
オブジェクトを渡すことで、Find()
メソッドの動作を変更できます。
一般的に使用されるオプションは、次の方法で構成できます。
方式 | 説明 |
---|---|
| Gets or sets the number of documents to hold in a cursor at a given time. |
| Sets the collation options. |
| Sets the comment to the query. To learn more about query comments,
see the $comment page. |
| Sets the hint for which index to use. |
| Sets the maximum execution time on the server for this operation. |
利用可能なオプションをすべて確認するには、「FindOptions プロパティ」を参照してください。
例
この例では、次のアクションを実行します。
cuisine
フィールドに "Pizza" が含まれるすべてのドキュメントを検索BatchSize
を3
に設定結果をカーソルに保存
カーソルが参照するドキュメントを印刷
var filter = Builders<Restaurant>.Filter.Eq("cuisine", "Pizza"); var findOptions = new FindOptions { BatchSize = 3 }; using (var cursor = _restaurantsCollection.Find(filter, findOptions).ToCursor()) { foreach (var r in cursor.ToEnumerable()) { WriteLine(r.Name); } }
Pizza Town Victoria Pizza ...
詳細情報
クエリフィルターの詳細については、「クエリの指定」を参照してください。
LINQ を使用してクエリを指定する方法については、「LINQ」を参照してください。
Find()
メソッドの実行可能な例については、「ドキュメントの検索」ページを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。