返すドキュメントを指定する
Overview
このガイドでは、次のメソッドを使用して、読み取り操作から返されるドキュメントを指定する方法を学習できます。
mongocx::options::find::limit() : クエリから返されるドキュメントの最大数を指定します。
mongocx::options::find::sort() : 返されるドキュメントのソート順序を指定します。
mongocx::options::find::skip() : クエリ結果を返す前にスキップするドキュメントの数を指定します。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants
データベース内の restaurants
コレクションを使用します。 C++アプリケーションからこのコレクションにアクセスするには、Atlasmongocxx::client
クラスターに接続する をインスタンス化し、 変数と 変数に次の値を割り当てます。db
collection
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
Limit
読み取り操作から返されるドキュメントの最大数を指定するには、 mongocxx::options::find
クラスのインスタンスを作成し、そのlimit
フィールドを 設定します。 次に、 mongocxx::options::find
インスタンスをfind()
メソッドの引数として渡します。
次の例では、 cuisine
フィールドの値が"Italian"
であるすべてのレストランを検索し、結果を5
ドキュメントに制限します。
mongocxx::options::find opts{}; opts.limit(5); auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Philadelphia Grille Express", "restaurant_id" : "40364305" } { "_id" : { "$oid" : "..." }, ..., "name" : "Isle Of Capri Restaurant", "restaurant_id" : "40364373" } { "_id" : { "$oid" : "..." }, ..., "name" : "Marchis Restaurant", "restaurant_id" : "40364668" } { "_id" : { "$oid" : "..." }, ..., "name" : "Crystal Room", "restaurant_id" : "40365013" } { "_id" : { "$oid" : "..." }, ..., "name" : "Forlinis Restaurant", "restaurant_id" : "40365098" }
Tip
上記の例では、データベース内の自然な順序に従ってクエリに一致する最初の 5 つのドキュメントが返されます。 次のセクションでは、指定された順序でドキュメントを返す方法について説明します。
Sort
指定された順序でドキュメントを返すには、結果を並べ替えるフィールドと並べ替え方向を含むドキュメントを作成します。 1
の値は最低から最高の順にソートされ、 -1
の値は最高から最低の順にソートされます。 次に、 mongocxx::options::find
インスタンスでmongocxx::options::find::sort()
メソッドを呼び出し、このドキュメントを引数として渡します。
次の例では、 cuisine
値が"Italian"
であるすべてのドキュメントを、 name
フィールド値の昇順でソートして返します。
mongocxx::options::find opts{}; opts.sort(make_document(kvp("name", 1))); auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "(Lewis Drug Store) Locanda Vini E Olii", "restaurant_id" : "40804423" } { "_id" : { "$oid" : "..." }, ..., "name" : "101 Restaurant And Bar", "restaurant_id" : "40560108" } { "_id" : { "$oid" : "..." }, ..., "name" : "44 Sw Ristorante & Bar", "restaurant_id" : "40698807" } ... { "_id" : { "$oid" : "..." }, ..., "name" : "Zucchero E Pomodori", "restaurant_id" : "41189590" }
スキップ
クエリ結果を返す前に指定した数のドキュメントをスキップするには、 mongocxx::options::find
クラスのインスタンスを作成し、そのskip
フィールドを 設定します。 次に、 mongocxx::options::find
インスタンスをfind()
メソッドの引数として渡します。
次の例では、 borough
フィールドの値が"Manhattan"
であるすべてのドキュメントを返し、最初の10
ドキュメントをスキップします。
mongocxx::options::find opts{}; opts.skip(10); auto cursor = collection.find(make_document(kvp("borough", "Manhattan")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Cafe Metro", "restaurant_id" : "40363298" } { "_id" : { "$oid" : "..." }, ..., "name" : "Lexler Deli", "restaurant_id" : "40363426" } { "_id" : { "$oid" : "..." }, ..., "name" : "Domino'S Pizza", "restaurant_id" : "40363644" } ...
制限、ソート、スキップの組み合わせ
単一のmongocxx::options::find
インスタンスのlimit
、 sort
、およびskip
フィールドを設定できます。 これにより、返されるソートされたドキュメントの最大数を設定して、返される前に指定された数のドキュメントをスキップできます。
次の例では、 cuisine
の値が"Italian"
である5
ドキュメントが返されます。 結果はname
フィールド値の昇順でソートされ、最初の10
ドキュメントはスキップされます。
mongocxx::options::find opts{}; opts.sort(make_document(kvp("name", 1))).limit(5).skip(10); auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Acqua", "restaurant_id" : "40871070" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acqua Restaurant", "restaurant_id" : "41591488" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acqua Santa", "restaurant_id" : "40735858" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acquista Trattoria", "restaurant_id" : "40813992" } { "_id" : { "$oid" : "..." }, ..., "name" : "Acquolina Catering", "restaurant_id" : "41381423" }
注意
これらのメソッドを呼び出す順序によって、返されるドキュメントは変更されません。 ドライバーは、最初にソート操作、次にスキップ操作、次に制限操作を実行して、呼び出しの順序を自動的に並べ替えます。
詳細情報
ドキュメント取得の詳細については、 データ取得ガイドを 参照してください。
クエリの指定の詳細については、「 クエリの指定」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。