Docs Menu
Docs Home
/ / /
C++ ドライバー
/

Retrieve Data

項目一覧

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

このガイドでは、 C++ドライバーを使用して、読み取り操作によりMongoDBコレクションからデータを検索する方法を学習できます。 コレクションで find()またはfind_one()メソッドを呼び出して、基準のセットに一致するドキュメントを検索できます。

このガイドの例では、 Atlasサンプルデータセットsample_trainingデータベースのcompaniesコレクションを使用します。 C++アプリケーションからこのコレクションにアクセスするには、Atlasmongocxx::client クラスターに接続する をインスタンス化し、 変数と 変数に次の値を割り当てます。dbcollection

auto db = client["sample_training"];
auto collection = db["companies"];

MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。

C++ドライバーには、コレクションからドキュメントを検索するための 2 つのメソッドfind_one()find()が含まれています。 これらのメソッドはクエリフィルターを受け取り、1 つ以上の一致するドキュメントを返します。 クエリフィルターは、クエリで検索するドキュメントを指定するオブジェクトです。

Tip

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

コレクション内の 1 つのドキュメントを検索するには、 find_one()メソッドを呼び出し、検索するドキュメントの基準を指定するクエリフィルターを渡します。

find_one()メソッドはstd::optional< bsoncxx::document::value >のインスタンスを返します。 クエリフィルターがドキュメントと一致する場合、 optionalオブジェクトにはbsoncxx::document::value型の値が含まれます。 クエリフィルターがどのドキュメントにも一致しない場合、 optionalオブジェクトには値が含まれません。

クエリフィルターが複数のドキュメントに一致する場合、 find_one()メソッドは検索した結果から最初に一致するドキュメントを返します。

Tip

find_one()メソッドは、一致するドキュメントが 1 つしかないことがわかっている場合や、最初の一致のみに該当する場合に便利です。

次の例では、 find_one()メソッドを使用して、 nameフィールドの値が"LinkedIn"になっている最初のドキュメントを検索します。

auto result = collection.find_one(make_document(kvp("name", "LinkedIn")));
std::cout << bsoncxx::to_json(*result) << std::endl;
{ "_id" : { "$oid" : "52cdef7c4bab8bd675297e0c" }, "name" : "LinkedIn", "permalink" : "linkedin",
"crunchbase_url" : "http://www.crunchbase.com/company/linkedin", "homepage_url" : "http://linkedin.com",
...

Tip

並び替え順

ソート条件が指定されていない場合、 find_one()メソッドはディスク上の自然な順序で最初のドキュメントを返します。

並べ替えについて詳しくは、「 返すドキュメントを指定する 」ガイドの「並べ替え」セクションを参照してください。

コレクション内の複数のドキュメントを検索するには、検索するドキュメントの基準を指定するクエリフィルターを find() メソッドに渡します。

次の例では、 find()メソッドを使用して、 founded_yearフィールドの値が1970であるすべてのドキュメントを検索します。

auto cursor = collection.find(make_document(kvp("founded_year", 1970)));

find()メソッドはmongocxx::cursorのインスタンスを返します。これを反復処理して一致するドキュメントを確認できます。 カーソルは、アプリケーションがデータベースの結果を反復処理しながら、特定の時点でメモリ内に結果のサブセットのみを保持できるようにするメカニズムです。 カーソルは、 find()メソッドが大量のドキュメントを返す場合に便利です。

次の例に示すように、 for-inループを使用して、カーソル内のドキュメントを反復処理できます。

auto cursor = collection.find(make_document(kvp("founded_year", 1970)));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : { "$oid" : "52cdef7d4bab8bd675298be4" }, "name" : "Mitsubishi Motors",
"permalink" : "mitsubishi-motors", "crunchbase_url" : "http://www.crunchbase.com/company/mitsubishi-motors",
...
{ "_id" : { "$oid" : "52cdef7e4bab8bd67529b996" }, "name" : "Western Digital",
"permalink" : "western-digital", "crunchbase_url" : "http://www.crunchbase.com/company/western-digital",
...
{ "_id" : { "$oid" : "52cdef7e4bab8bd67529b9f1" }, "name" : "Celarayn", "permalink" : "celarayn",
"crunchbase_url" : "http://www.crunchbase.com/company/celarayn",
...

注意

すべてのドキュメントの検索

コレクション内のすべてのドキュメントを検索するには、 find()メソッドに空のフィルターを渡します。

auto cursor = collection.find({})

mongocxx::options::findクラスのインスタンスをパラメーターとして渡すことで、 find()メソッドとfind_one()メソッドの動作を変更できます。 次の表では、 mongocxx::options::findインスタンスで設定できるフィールドの一部について説明しています。

フィールド
説明
batch_size
The number of documents to return per batch.
Type: std::int32_t
collation
The collation to use for the operation.
Type: bsoncxx::document::view_or_value
comment
The comment to attach to the operation.
Type: bsoncxx::string::view_or_value
cursor_type
The type of cursor to use for the operation.
Type: cursor::type
limit
The maximum number of documents the operation can return.
Type: std::int64_t
skip
The number of documents to skip before returning results.
Type: std::int64_t
sort
The order in which the operation returns matching documents.
Type: bsoncxx::document::view_or_value

次の例では、 find()メソッドを使用して、 number_of_employeesフィールドの値が1000であるすべてのドキュメントを検索し、最大5の結果を返すように操作に指示します。

mongocxx::options::find opts;
opts.limit(5);
auto cursor = collection.find(make_document(kvp("number_of_employees", 1000)), opts);

mongocxx::options::findオブジェクトフィールドの完全なリストについては、 APIドキュメントを参照してください。

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

C++ドライバーを使用してドキュメントを取得する実行可能なコード例については、「 MongoDBからのデータの読み取り 」を参照してください。

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

  • find()

  • find_one()

  • limit()

戻る

MongoDB からのデータの読み取り