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

クエリを指定する

項目一覧

  • Overview
  • サンプル データ
  • 完全一致
  • 比較演算子
  • 論理演算子
  • 配列演算子
  • 要素演算子
  • 評価演算子
  • 詳細情報
  • API ドキュメント

このガイドでは、C++ ドライバーを使用してクエリを指定する方法を学習できます。

クエリフィルターを作成することで、クエリが返すドキュメントのセットを絞り込むことができます。 クエリフィルターは、読み取りまたは書込み操作においてドキュメントを照合するためにMongoDBが使用する検索条件を指定する式です。 クエリフィルターでは、クエリに完全に一致するドキュメントを検索するようにドライバーに指示することも、より複雑な一致条件をExpressするためにクエリフィルターを作成することもできます。

このガイドの例では、実稼働ドキュメントを含む fruitsというコレクションに対して操作を実行します。 次のコード例は、データベースとコレクションを作成し、サンプルドキュメントをコレクションに挿入する方法を示しています。

mongocxx::uri uri("<connection string>");
mongocxx::client client(uri);
auto db = client["db"];
auto collection = db["fruits"];
std::vector<bsoncxx::document::value> fruits;
fruits.push_back(make_document(kvp("_id", 1), kvp("name", "apples"), kvp("qty", 5), kvp("rating", 3), kvp("color", "red"), kvp("type", make_array("fuji", "honeycrisp"))));
fruits.push_back(make_document(kvp("_id", 2), kvp("name", "bananas"), kvp("qty", 7), kvp("rating", 4), kvp("color", "yellow"), kvp("type", make_array("cavendish"))));
fruits.push_back(make_document(kvp("_id", 3), kvp("name", "oranges"), kvp("qty", 6), kvp("rating", 2), kvp("type", make_array("naval", "mandarin"))));
fruits.push_back(make_document(kvp("_id", 4), kvp("name", "pineapples"), kvp("qty", 3), kvp("rating", 5), kvp("color", "yellow")));
auto result = collection.insert_many(fruits);

注意

mongocx::インスタンス

このページのコード例では、アプリケーション内の他の場所にmongocxx::instanceオブジェクトがすでに作成されていることを前提としています。

インスタンスの作成の詳細については、「 ドライバー インスタンスの作成 」を参照してください。

リテラル値クエリは、クエリフィルターに完全に一致するドキュメントを返します。

次の例では、 find()メソッドのパラメーターとしてクエリフィルターを指定します。 このコードでは、 colorフィールドの値が"yellow"であるすべてのドキュメントが返されます。

auto cursor = collection.find(make_document(kvp("color", "yellow")));
for (auto &&doc : cursor)
{
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapple", "qty" : 3, "rating" : 5, "color" : "yellow" }

Tip

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

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

auto cursor = collection.find({});

比較演算子は、ドキュメントフィールド値をクエリフィルター内の指定された値に対して評価します。 次のリストでは、一般的な比較演算子を定義しています。

  • $gt: より大きい

  • $lte: 以下

  • $ne: 等しくない

比較演算子の完全なリストを表示するには、 マニュアルの「 比較クエリ演算子 」MongoDB Server ガイドを参照してください。

次の例では、クエリフィルター内の 比較演算子をfind()メソッドへのパラメーターとして指定しています。 コードは、 ratingフィールドの値が2より大きいすべてのドキュメントを返します。

auto cursor = collection.find(make_document(kvp("rating", make_document(kvp("$gt", 2)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

論理演算子は、2 つ以上の式のセットの結果に適用されたロジックを使用してドキュメントを一致させます。 以下のリストは、各論理演算子について説明します。

  • $and:すべての句の条件に一致するすべてのドキュメントを返します

  • $or: 1 つの句の条件に一致するすべてのドキュメントを返します

  • $nor: どの句の条件にも一致しないすべてのドキュメントを返します

  • $not:式に一致しないすべてのドキュメントを返します

論理演算子の詳細については、 MongoDB Serverマニュアルの「 論理クエリ演算子 」ガイドを参照してください。

次の例では、クエリフィルターで論理演算子をfind()メソッドへのパラメーターとして指定します。 このコードでは、 qtyフィールドの値が5より大きいか、またはcolorフィールドの値が"yellow"であるすべてのドキュメントが返されます。

auto cursor = collection.find(
make_document(kvp("$or",
make_array(make_document(kvp("qty", make_document(kvp("$gt", 5)))),
make_document(kvp("color", "yellow"))))));
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 3, "name" : "oranges", "qty" : 6, "rating" : 2, "type" : [ "naval", "mandarin" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

配列演算子は、 配列フィールド内の要素の値または量に基づいてドキュメントを一致させます。 次のリストでは、使用可能な配列演算子を説明しています。

  • $all: クエリ内のすべての要素を含む配列を持つドキュメントを返します

  • $elemMatch: 配列フィールド内の要素がクエリ内のすべての条件に一致する場合にドキュメントを返します

  • $size: 指定されたサイズの配列を持つすべてのドキュメントを返します

配列演算子の詳細については、MongoDB Server マニュアルの「 配列クエリ演算子 」ガイドを参照してください。

次の例では、クエリフィルター内の配列演算子をfind()メソッドへのパラメーターとして指定しています。 このコードでは、 type配列フィールドに2要素が含まれるすべてのドキュメントが返されます。

auto cursor = collection.find(make_document(kvp("type", make_document(kvp("$size", 2)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 3, "name" : "oranges", "qty" : 6, "rating" : 2, "type" : [ "naval", "mandarin" ] }

要素演算子は、フィールドの存在または型に基づいてデータをクエリします。

要素演算子の詳細については、 MongoDB Serverマニュアルの「 要素クエリ演算子 」ガイドを参照してください。

次の例では、クエリフィルター内の要素演算子をfind()メソッドへのパラメーターとして指定しています。 このコードでは、 colorフィールドを持つすべてのドキュメントが返されます。

auto cursor = collection.find(make_document(kvp("color", make_document(kvp("$exists", true)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

評価演算子は、個々のフィールドまたはコレクションのドキュメント全体の評価に基づいてデータを返します。

次のリストでは、一般的な評価演算子について説明します。

  • $text: ドキュメントに対してテキスト検索を実行します

  • $regex: 指定された正規式に一致するドキュメントを返します

  • $mod:フィールド値に対して剰余操作を実行し、余りが指定された値であるドキュメントを返します

評価演算子の完全なリストを表示するには、 マニュアルの「 評価クエリ演算子MongoDB Server 」ガイドを参照してください。

次の例では、クエリフィルターで評価演算子をfind()メソッドへのパラメーターとして指定しています。 このコードでは正規式を使用して、 nameフィールド値に少なくとも 2 文字の連続した"p"文字があるすべてのドキュメントを返します。

auto cursor = collection.find(make_document(kvp("name", make_document(kvp("$regex", "p{2,}")))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

ドキュメントのクエリの詳細については、MongoDB Server マニュアルの 「ドキュメントのクエリ」 ガイドを参照してください。

C++ドライバーを使用してドキュメントを取得する方法の詳細については、「データ取得ガイド」を参照してください。

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

戻る

Retrieve Data