返すフィールドを指定する
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" : ObjectId("..."), "cuisine" : "American", "name" : "Emerald Pub" } { "_id" : ObjectId("..."), "cuisine" : "American", "name" : "Emerald Pub" }
フィールドを除外する_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()); }
{ "cuisine" : "American", "name" : "Emerald Pub" } { "cuisine" : "American", "name" : "Emerald Pub" }
除外するフィールドの指定
結果から除外するフィールドを指定するには、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()); }
{ "_id" : ObjectId("..."), "address" : { "building" : "308", "coord" : [-74.008493599999994, 40.725807199999998], "street" : "Spring Street", "zipcode" : "10013" }, "borough" : "Manhattan", "grades" : [{ "date" : ISODate("2014-02-24T00:00:00Z"), "grade" : "A", "score" : 5 }, { "date" : ISODate("2013-08-26T00:00:00Z"), "grade" : "A", "score" : 13 }, { "date" : ISODate("2013-03-04T00:00:00Z"), "grade" : "A", "score" : 12 }, { "date" : ISODate("2012-06-25T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-12-23T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-07-26T00:00:00Z"), "grade" : "C", "score" : 32 }], "name" : "Emerald Pub", "restaurant_id" : "40367329" } { "_id" : ObjectId("..."), "address" : { "building" : "18301", "coord" : [-73.791184999999999, 40.740119999999997], "street" : "Horace Harding Expressway", "zipcode" : "11365" }, "borough" : "Queens", "grades" : [{ "date" : ISODate("2014-05-07T00:00:00Z"), "grade" : "A", "score" : 12 }, { "date" : ISODate("2013-04-30T00:00:00Z"), "grade" : "A", "score" : 9 }, { "date" : ISODate("2012-03-01T00:00:00Z"), "grade" : "A", "score" : 13 }], "name" : "Emerald Pub", "restaurant_id" : "40668598" }
詳細情報
プロジェクションの詳細については、MongoDB Server マニュアルの「プロジェクト フィールド 」ガイドを参照してください。
API ドキュメント
このガイドで説明した関数や型の詳細については、次のAPIドキュメントを参照してください。