Overview
このガイドでは、 Cドライバーを使用してクエリを指定する方法を学習できます。
クエリの実行時にコレクションから特定のドキュメントを検索するためのクエリフィルターを定義できます。クエリフィルターは、 MongoDB が読み取りまたは書込み (write)操作においてドキュメントを照合するために使用する検索条件を指定する式です。 クエリフィルター を定義することで、クエリに完全に一致するドキュメントを検索するようにドライバーに指示したり、より複雑な一致条件をExpressようにクエリフィルターを作成したりすることもできます。
サンプル データ
このガイドの例では、Atlas サンプルデータセットの sample_mflix データベースの movies コレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、MongoDBを使い始めるガイドを参照してください。
完全一致
リテラル値クエリは、クエリフィルターに完全に一致するドキュメントを返します。
次の例では、 mongoc_collection_find_with_opts() 関数のパラメーターとしてクエリフィルターを指定します。 このコードは、typeフィールドの値が "movie" であるすべてのドキュメントを返します。
const bson_t *doc; bson_t *filter = BCON_NEW("type", BCON_UTF8("movie")); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
比較演算子
比較演算子は、クエリフィルター内の指定された値に対してドキュメント フィールド値を評価します。 以下は、一般的な比較演算子のリストです。
$gt: より大きい$lte: 以下$ne: 等しくない
演算子の完全なリストを表示するには、 マニュアルの「 比較クエリ演算子 MongoDB Server」ガイドを参照してください。
次の例では、クエリフィルター内の 比較演算子を mongoc_collection_find_with_opts() 関数へのパラメーターとして指定します。 コードは、yearフィールドの値が 2015 より大きいすべてのドキュメントを返します。
const bson_t *doc; bson_t *filter = BCON_NEW("year", "{", "$gt", BCON_INT32(2015), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
論理演算子
論理演算子は、2 つ以上の式のセットの結果に適用されたロジックを使用してドキュメントを一致させます。 以下は論理演算子のリストです。
$andは、すべての句の条件に一致するすべてのドキュメントを返します。$orは、 1 つの句の条件に一致するすべてのドキュメントを返します$norは、どの句の条件にも一致しないすべてのドキュメントを返します。$notは、式に一致しないすべてのドキュメントを返します。
論理演算子の詳細については、 MongoDB Serverマニュアルの「 論理クエリ演算子 」ガイドを参照してください。
次の例では、クエリフィルターで論理演算子を mongoc_collection_find_with_opts() 関数のパラメーターとして指定します。 コードは、 フィールドの値がyear 1983または1985 であるすべてのドキュメントを返します。
const bson_t *doc; bson_t *filter = BCON_NEW( "$or", "[", "{", "year", BCON_INT64(1983), "}", "{", "year", BCON_INT64(1985), "}", "]" ); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
配列演算子
配列演算子は、配列フィールド内の要素の値または量に基づいてドキュメントを一致させます。 以下は、使用可能な配列演算子のリストです。
$allは、クエリ内のすべての要素を含む配列を持つドキュメントを返します$elemMatchは、配列フィールド内の要素がクエリ内のすべての条件に一致する場合にドキュメントを返します。$sizeは、指定されたサイズの配列を持つすべてのドキュメントを返します
To learn more about array operators, see the Array Query Operators guide in the MongoDB Server manual.
次の例では、クエリフィルター内の配列演算子を mongoc_collection_find_with_opts() 関数のパラメーターとして指定しています。 このコードは、genres 配列フィールドの値に 2 要素のみが含まれているすべてのドキュメントを返します。
const bson_t *doc; bson_t *filter = BCON_NEW("genres", "{", "$size", BCON_INT32(2), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
要素演算子
要素演算子は、フィールドの存在または型に基づいてデータをクエリします。
要素演算子の詳細については、 MongoDB Serverマニュアルの「 要素クエリ演算子 」ガイドを参照してください。
次の例では、クエリフィルターで $exists 演算子を mongoc_collection_find_with_opts() 関数のパラメーターとして指定します。 このコードでは、num_mflix_commentsフィールド を持つすべてのドキュメントが返されます。
const bson_t *doc; bson_t *filter = BCON_NEW("num_mflix_comments", "{", "$exists", BCON_BOOL(true), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
評価演算子
評価演算子は、個々のフィールドまたはコレクションのドキュメント全体の評価に基づいてデータを返します。
以下は、一般的な評価演算子のリストです。
$textは、ドキュメントに対してテキスト検索を実行します$regexは、指定された正規表現に一致するドキュメントを返します$mod, which performs a modulo operation on the value of a field and returns documents where the remainder is a specified value
評価演算子の完全なリストを表示するには、 マニュアルの「 評価クエリ演算子MongoDB Server 」ガイドを参照してください。
次の例では、クエリフィルターで評価演算子を mongoc_collection_find_with_opts() 関数のパラメーターとして指定しています。 このコードでは正規式を使用して、titleフィールドの値に 2 文字以上連続した "p" 文字が含まれるすべてのドキュメントを返します。
const bson_t *doc; bson_t *filter = BCON_NEW("title", "{", "$regex", BCON_UTF8("p{2,}"), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts(collection, filter, NULL, NULL); while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } mongoc_cursor_destroy(results); bson_destroy(filter);
詳細情報
To learn more about querying documents, see the Query Documents guide in the MongoDB Server manual.
Cドライバーを使用してドキュメントを検索する方法の詳細については、ドキュメントの検索を参照してください。
API ドキュメント
mongoc_collection_find_with_opts() 関数の詳細については、APIドキュメントを参照してください。