Overview
このガイドでは、プロジェクションを使用して、読み取り操作から返されるフィールドを指定する方法を学習できます。 プロジェクションは、MongoDB がクエリから返すフィールドを指定するドキュメントです。
サンプル データ
このガイドの例では、Atlas サンプル データセットの sample_restaurants.restaurants コレクションを使用します。MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、クイック スタートを参照してください。
プロジェクションのタイプ
プロジェクションを使用して、返されるドキュメントに含めるフィールドを指定したり、除外するフィールドを指定したりできます。
プロジェクションに含める特定のフィールドを指定すると、他のすべてのフィールドは暗黙的に除外されます(デフォルトで含まれる_idフィールドを除く)。 _idフィールドを除外しない限り、1 つのプロジェクションに包含ステートメントと除外ステートメントを組み合わせることはできません。
返されたドキュメントから_idフィールドを削除するには、明示的に除外する必要があります。
含めるフィールドの指定
結果に含めるフィールドを指定するには、Project() メソッドと Find() メソッドをチェーンします。 Project() メソッドを呼び出すときは、プロジェクション定義をパラメーターとして渡す必要があります。 Builders<T>.Projection.Include() メソッドを使用し、 をパラメーターとして含めるフィールド名を渡すことで、プロジェクション定義を構築できます。 このメソッドは、プロジェクションに複数のフィールドを含めるために連鎖させることができます。
次の例では、 Find() メソッドを使用して、nameフィールドの値が "Emerald Pub" であるすべてのレストランを検索します。 次に、コードは Project() メソッドを呼び出して、name フィールドと cuisine フィールドを結果に含めるように検索操作に指示します。
var filter = Builders<BsonDocument>.Filter.Eq("name", "Emerald Pub"); var projection = Builders<BsonDocument>.Projection .Include("name") .Include("cuisine"); var results = collection.Find(filter).Project(projection).ToList(); foreach (var result in results) { Console.WriteLine(result.ToJson()); }
_id フィールドを除外する
含めるフィールドを指定する場合は、返されるドキュメントから_idフィールドを除外することもできます。
次の例では、前の例と同じクエリを実行しますが、プロジェクションから_idフィールドを除外しています。
var filter = Builders<BsonDocument>.Filter.Eq("name", "Emerald Pub"); var projection = Builders<BsonDocument>.Projection .Include("name") .Include("cuisine") .Exclude("_id"); var results = collection.Find(filter).Project(projection).ToList(); foreach (var result in results) { Console.WriteLine(result.ToJson()); }
除外するフィールドの指定
結果から除外するフィールドを指定するには、Project() メソッドと Find() メソッドをチェーンします。 プロジェクション内のフィールドを除外するには、Builders<T>.Projection.Exclude() メソッドを使用し、除外するフィールド名をパラメーターとして渡します。 このメソッドを連鎖させることで、プロジェクションの複数のフィールドを除外できます。
次の例では、 Find() メソッドを使用して、nameフィールドの値が "Emerald Pub" であるすべてのレストランを検索します。 次に、プロジェクションを使用して、返されるドキュメントから cuisineフィールドを除外します。
var filter = Builders<BsonDocument>.Filter.Eq("name", "Emerald Pub"); var projection = Builders<BsonDocument>.Projection .Exclude("cuisine"); var results = collection.Find(filter).Project(projection).ToList(); foreach (var result in results) { Console.WriteLine(result.ToJson()); }
詳細情報
プロジェクションの詳細については、MongoDB Server マニュアルの「プロジェクト フィールド 」ガイドを参照してください。
API ドキュメント
このガイドで説明した関数や型の詳細については、次のAPIドキュメントを参照してください。