Docs Menu
Docs Home
/ / /
C#/.NET
/ / /

Retrieve Data

項目一覧

  • Overview
  • サンプル データ
  • ドキュメントの検索
  • 1 つのドキュメントの検索
  • 複数ドキュメントの検索
  • 検索動作の変更
  • 詳細情報
  • API ドキュメント

このガイドでは、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; }
[BsonElement("restaurant_id")]
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; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
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 つのドキュメントを検索するには、検索するドキュメントの基準を指定するクエリフィルターを渡し、FirstOrDefault() メソッドまたは FirstOrDefaultAsync() メソッドを連鎖させます。複数のドキュメントがクエリフィルターに一致する場合、これらのメソッドは検索した結果から最初に一致するドキュメントを返します。クエリフィルターに一致するドキュメントがない場合、メソッドは null を返します。

var restaurants = await _restaurantsCollection.Find(filter).FirstOrDefaultAsync();
var restaurants = _restaurantsCollection.Find(filter).FirstOrDefault();

Tip

最初のドキュメント

ソート条件が指定されていない場合、 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() メソッドの動作を変更できます。

一般的に使用されるオプションは、次の方法で構成できます。

方式
説明
BatchSize
Gets or sets the number of documents to hold in a cursor at a given time.
Collation
Sets the collation options.
Comment
Sets the comment to the query. To learn more about query comments, see the $comment page.
Hint
Sets the hint for which index to use.
MaxTime
Sets the maximum execution time on the server for this operation.

使用可能なオプションの完全なリストについては、 「FindOptions プロパティ」を参照してください。

この例では、次のアクションを実行します。

  • cuisine フィールドに "Pizza" が含まれるすべてのドキュメントを検索

  • BatchSize3 に設定

  • 結果をカーソルに保存

  • カーソルが参照するドキュメントを印刷

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
...

Tip

クリーンアップ

カーソルが使用されなくなったら Dispose() メソッドを自動的に呼び出すには、using ステートメントを使用してカーソルを作成します。

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

LINQ を使用してクエリを指定する方法については、「LINQ」を参照してください。

Find() メソッドの実行可能な例については、「ドキュメントの検索」ページを参照してください。

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

戻る

読み取り操作