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

クエリを指定する

項目一覧

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

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

クエリの実行時にコレクションから特定のドキュメントを検索するためのクエリフィルターを定義できます。クエリフィルターは、 MongoDBが 読み取りまたは書込み (write)操作においてドキュメントを照合するために使用する検索条件を指定する式です。クエリフィルターを定義することで、クエリに完全に一致するドキュメントを検索するようにドライバーに指示したり、より複雑な一致条件を表現するためにクエリフィルターを作成したりすることもできます。

このガイドの例では、 Atlas サンプル データセットsample_mflixデータベース内の moviesコレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。

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

次の例では、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);
{ "_id" : { "$oid" : "..." }, "title" : "Wild and Woolly", "type" : "movie", ... }
{ "_id" : { "$oid" : "..." }, "title" : "The Devil to Pay!", "type" : "movie", ... }
{ "_id" : { "$oid" : "..." }, "title" : "Traffic in Souls", "type" : "movie", ... }
{ "_id" : { "$oid" : "..." }, "title" : "Now or Never", "type" : "movie", ... }
{ "_id" : { "$oid" : "..." }, "title" : "High and Dizzy", "type" : "movie", ... }
...

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

  • $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);
{ "_id" : ..., "title" : "The Masked Saint", "year" : { "$numberInt" : "2016" }, ... }

論理演算子は、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);
{ "_id" : ..., "title" : "Amityville 3-D", "year" : { "$numberInt" : "1983" }, ... }
{ "_id" : ..., "title" : "Barefoot Gen", "year" : { "$numberInt" : "1983" }, ... }
{ "_id" : ..., "title" : "Betrayal", "year" : { "$numberInt" : "1983" }, ... }
{ "_id" : ..., "title" : "You're a Good Man, Charlie Brown", "year" : { "$numberInt" : "1985" }, ... }
{ "_id" : ..., "title" : "Yes: 9012 Live", "year" : { "$numberInt" : "1985" }, ... }
...

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

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

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

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

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

次の例では、クエリフィルター内の配列演算子を 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);
{ "_id" : ..., "genres" : [ "Comedy", "Romance" ], "title" : "The Devil to Pay!", ... }
{ "_id" : ..., "genres" : [ "Crime", "Drama" ], "title" : "Traffic in Souls", ... }
{ "_id" : ..., "genres" : [ "Comedy", "Short" ], "title" : "High and Dizzy", ... }
{ "_id" : ..., "genres" : [ "Comedy", "Short" ], "title" : "Now or Never", ... }
{ "_id" : ..., "genres" : [ "Drama", "Romance" ], "title" : "A Woman of Paris: A Drama of Fate", ... }
...

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

要素演算子の詳細については、 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);
{ "_id" : ..., "num_mflix_comments" : { "$numberInt" : "0" }, "title" : "The Park Is Mine", ...}
{ "_id" : ..., "num_mflix_comments" : { "$numberInt" : "1" }, "title" : "The Good Father", ... }
{ "_id" : ..., "num_mflix_comments" : { "$numberInt" : "0" }, "title" : "Alpine Fire", ... }
{ "_id" : ..., "num_mflix_comments" : { "$numberInt" : "1" }, "title" : "Huang jia shi jie", ... }
{ "_id" : ..., "num_mflix_comments" : { "$numberInt" : "0" }, "title" : "Twenty Years Later", ... }
...

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

以下は、一般的な評価演算子のリストです。

評価演算子の完全なリストを表示するには、 マニュアルの「 評価クエリ演算子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);
{ "_id" : ..., "title" : "He Who Gets Slapped", ... }
{ "_id" : ..., "title" : "David Copperfield", ... }
{ "_id" : ..., "title" : "Applause", ... }
{ "_id" : ..., "title" : "Skippy", ... }
{ "_id" : ..., "title" : "This Happy Breed", ... }
...

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

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

mongoc_collection_find_with_opts()関数の詳細については、 APIドキュメントを参照してください。

戻る

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