返すフィールドを指定する
Overview
このガイドでは、 C++ドライバーを使用して、プロジェクションを使用して読み取り操作から返されるフィールドを指定する方法を学習できます。 プロジェクションは、 MongoDBがクエリから返すフィールドを指定するドキュメントです。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants
データベース内の restaurants
コレクションを使用します。 C++アプリケーションからこのコレクションにアクセスするには、Atlasmongocxx::client
クラスターに接続する をインスタンス化し、 変数と 変数に次の値を割り当てます。db
collection
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
プロジェクションのタイプ
プロジェクションを使用して、返されるドキュメントに含めるフィールドを指定したり、除外するフィールドを指定したりできます。 _id
フィールドを除外しない限り、1 つのプロジェクションに包含ステートメントと除外ステートメントを組み合わせることはできません。
含めるフィールドの指定
結果に含めるフィールドを指定するには、 mongocxx::options::find
クラスのインスタンスを作成し、そのprojection
フィールドを に設定します。 このフィールドを設定するには、次の構文を使用します。
<options instance>.projection(make_document(kvp("<field name>", 1)));
次の例では、 mongocxx::options::find
オブジェクトのprojection
フィールドを に設定して、一致するドキュメントのname
、 cuisine
、およびborough
フィールドのみを返します。 次に、 find()
メソッドを呼び出して、 name
フィールドの値が"Emerald Pub"
であるすべてのレストランを検索し、 mongocxx::options::find
オブジェクトをfind()
のパラメーターとして渡します。
mongocxx::options::find opts{}; opts.projection(make_document(kvp("name", 1), kvp("cuisine", 1), kvp("borough", 1))); auto cursor = collection.find(make_document(kvp("name", "Emerald Pub")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, "borough" : "Manhattan", "cuisine" : "American", "name" : "Emerald Pub" } { "_id" : { "$oid" : "..." }, "borough" : "Queens", "cuisine" : "American", "name" : "Emerald Pub" }
プロジェクションを使用して返されるドキュメントに含めるフィールドを指定すると、 _id
フィールドもデフォルトで含まれます。 他のすべてのフィールドは暗黙的に除外されます。 返されるドキュメントから_id
フィールドを削除するには、明示的に除外する必要があります。
フィールドを除外する_id
含めるフィールドを指定する場合は、返されるドキュメントから_id
フィールドを除外することもできます。
次の例では、前の例と同じクエリを実行しますが、プロジェクションから_id
フィールドを除外します。
mongocxx::options::find opts{}; opts.projection(make_document(kvp("_id", 0), kvp("name", 1), kvp("cuisine", 1), kvp("borough", 1))); auto cursor = collection.find(make_document(kvp("name", "Emerald Pub")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "borough" : "Manhattan", "cuisine" : "American", "name" : "Emerald Pub" } { "borough" : "Queens", "cuisine" : "American", "name" : "Emerald Pub" }
除外するフィールドの指定
結果で除外するフィールドを指定するには、 mongocxx::options::find
クラスのインスタンスを作成し、そのprojection
フィールドを に設定します。 このフィールドを設定するには、次の構文を使用します。
<options instance>.projection(make_document(kvp("<field name>", 0)));
次の例では、projection
mongocxx::options::find
オブジェクトの フィールドを設定して、一致するドキュメントのgrades
フィールドとaddress
フィールドを除外します。次に、 find()
メソッドを呼び出して、 name
フィールドの値が"Emerald Pub"
で、 mongocxx::options::find
オブジェクトをfind()
のパラメータとして渡しているすべてのレストランを検索します。
mongocxx::options::find opts{}; opts.projection(make_document(kvp("grades", 0), kvp("address", 0))); auto cursor = collection.find(make_document(kvp("name", "Emerald Pub")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, "borough" : "Manhattan", "cuisine" : "American", "name" : "Emerald Pub", "restaurant_id" : "40367329" } { "_id" : { "$oid" : "..." }, "borough" : "Queens", "cuisine" : "American", "name" : "Emerald Pub", "restaurant_id" : "40668598" }
プロジェクションを使用して除外するフィールドを指定すると、指定されていないフィールドは返されるドキュメントに暗黙的に含まれます。
詳細情報
プロジェクションの詳細については、 MongoDB Serverマニュアルの「プロジェクト フィールド 」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。