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

データベースとコレクション

項目一覧

  • Overview
  • データベースへのアクセス
  • コレクションにアクセスする
  • コレクションを作成する
  • コレクションの一覧を取得する
  • コレクションの削除
  • 読み取り操作と書込み操作の設定
  • タグセット
  • LocalThreshold
  • API ドキュメント

このガイドでは、 Cドライバーを使用してMongoDBのデータベースとコレクションを操作する方法を学習できます。

MongoDB では、データは次のレベルの階層に整理されています。

  • データベース: コレクションを保存するMongoDBデプロイの最上位のデータ構造。

  • コレクション: MongoDBドキュメントのグループ。 関係データベースのテーブルに類似しています。

  • ドキュメント: string 、数値、日付などのリテラル データを保存するユニット。およびその他の埋め込みドキュメントを保存するユニット。 ドキュメントフィールドのタイプと構造の詳細については、 MongoDB Serverマニュアルのドキュメントガイドを参照してください。

mongoc_client_get_database() 関数を使用してデータベースにアクセスします。

次の例えでは"test_database"という名前のデータベースにアクセスします。

mongoc_database_t *database = mongoc_client_get_database (client, "test_database");

コレクションにアクセスするには、mongoc_client_get_collection() または mongoc_database_get_collection() 関数を使用します。

次の例では、mongoc_database_get_collection() 関数を使用して、"test_collection" という名前のコレクションにアクセスします。

mongoc_collection_t *collection = mongoc_database_get_collection (database, "test_collection");

Tip

指定されたコレクション名がデータベースにまだ存在しない場合、MongoDB は最初にデータを挿入するときに暗黙的にコレクションを作成します。

MongoDBデータベースにコレクションを明示的に作成するには、mongoc_database_create_collection() 関数を使用します。

次の例では、 "example_collection"というコレクションを作成しています。

mongoc_collection_t *new_collection = mongoc_database_create_collection (database, "example_collection", NULL, &error);

最大サイズやドキュメント検証ルールなどのコレクションオプションは、 関数のbson_t 3 番目のパラメータとしてmongoc_database_create_collection() 構造内で渡すことで指定できます。オプションのパラメーターの完全なリストについては、 MongoDB Serverマニュアルの create コマンドのドキュメント を参照してください。

mongoc_database_find_collections_with_opts() 関数を呼び出すと、データベースのコレクションのリストをクエリできます。この関数は、データベース内のすべてのコレクションとそれに関連するメタデータを含むカーソルを返します。

次の例では、mongoc_database_find_collections_with_opts() 関数を呼び出し、カーソルを反復処理して結果を出力します。

mongoc_cursor_t *cursor = mongoc_database_find_collections_with_opts (database, NULL);
const bson_t *doc;
while (mongoc_cursor_next (cursor, &doc))
{
char *str = bson_as_canonical_extended_json (doc, NULL);
printf ("Collection: %s\n", str);
bson_free (str);
}
Collection: { "name" : "test_collection", "type" : "collection", ...}
Collection: { "name" : "example_collection", "type" : "collection", ... }

データベースのコレクションの名前のみをクエリするには、次のように mongoc_database_get_collection_names_with_opts() 関数を呼び出します。

char **strv;
unsigned i;
if ((strv = mongoc_database_get_collection_names_with_opts (database, NULL, &error)))
{
for (i = 0; strv[i]; i++)
printf ("%s\n", strv[i]);
bson_strfreev (strv);
}
else
{
fprintf (stderr, "Command failed: %s\n", error.message);
}
test_collection
example_collection

カーソルの反復処理の詳細については、「 カーソルからデータにアクセスする 」を参照してください。

データベースからコレクションを削除するには、mongoc_collection_drop() 関数を使用します。

次の例では、 "test_collection"コレクションを削除しています。

mongoc_collection_t *collection = mongoc_database_get_collection (database, "test_collection");
mongoc_collection_drop (collection, NULL);

警告

コレクションを削除すると、コレクション内のすべてのデータが削除されます

データベースからコレクションを削除すると、そのコレクション内のすべてのドキュメントとすべてのインデックスが永続的に削除されます。

コレクション内のデータが不要になった場合にのみコレクションを削除します。

読み込み設定( read preference ) を設定することで、ドライバーが読み取り操作をルーティングする方法を制御できます。 また、読み取り保証 ( read concern ) と書込み保証 ( write concern ) を設定して、ドライバーがレプリカセットでの読み取りおよび書込み (write) 操作の確認を待機する方法のオプションも制御できます。

デフォルトでは 、データベースは mongoc_client_tインスタンスからこれらの設定を継承し、コレクションはデータベースからこれらを継承します。ただし、次のいずれかの機能を使用して、データベース上のこれらの設定を変更できます。

  • mongoc_database_set_read_prefs()

  • mongoc_database_set_read_concern()

  • mongoc_database_set_write_concern()

次の例は、mongoc_database_set_read_prefs() 関数を使用してデータベースの読み込み設定( 読み込み設定 (read preference) )を変更する方法を示しています。

mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new (MONGOC_READ_PRIMARY_PREFERRED);
mongoc_database_set_read_prefs (database, read_prefs);

次のいずれかの機能を使用して、コレクションの読み取りおよび書込み設定を変更できます。

  • mongoc_collection_set_read_prefs()

  • mongoc_collection_set_read_concern()

  • mongoc_collection_set_write_concern()

次の例では、mongoc_collection_set_read_prefs() 関数を使用してコレクションの読み込み設定( 読み込み設定 (read preference) )を変更する方法を示しています。

mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new (MONGOC_READ_PRIMARY_PREFERRED);
mongoc_collection_set_read_prefs(collection, read_prefs);

読み取りおよび書込み設定の詳細については、MongoDB Server マニュアルの次のガイドを参照してください。

MongoDB Serverでは、選択した任意の基準に従ってレプリカセット メンバーにキーと値のタグを適用できます。次に、それらのタグを使用して、1 つ以上のノードを 読み取り操作の対象にすることができます。

デフォルトでは 、 Cドライバーは、読み取りノードを選択するときにタグを無視します。 Cドライバーに特定のタグを優先するように指示するには、mongoc_read_prefs_set_tags() 関数を使用して mongoc_read_prefs_t のインスタンスにタグを設定します。

次のコード例では、mongoc_read_prefs_set_tags() 関数に渡されるタグセットは、 Cドライバーに対して、ニューヨークデータセンター( 'dc': 'ny' )からの読み取りを優先し、サンフランシスコデータセンター( 'dc': 'sf' )にフォールバックするように指示します。

mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY_PREFERRED);
bson_t *tags = BCON_NEW ("DC", BCON_UTF8("ny"), "DC", BCON_UTF8("sf"));

指定した読み込み設定( 読み込み設定 (read preference) )とタグセットに一致するレプリカセット ノードが複数ある場合、 Cドライバーはping時間に応じて選択された最も近いレプリカセット ノードから読み取りを行います。

デフォルトでは 、ドライバーはping時間が最も近いメンバーの 15 ミリ秒以内であるメンバーのみをクエリに使用します。より高いレイテンシを持つメンバー間で読み取りを分散するには、接続文字列URI に localThresholdMS パラメータを含めます。

次の例では、localhost:27017 で実行中されているMongoDBデプロイに接続し、ローカルしきい値として 35 ミリ秒を指定しています。

const char *uri_string = "mongodb://localhost:27017/?localThresholdMS=35";
mongoc_client_t *client = mongoc_client_new (uri_string);

前の例では、 Cドライバーは、ノードのping時間の 35 ミリ秒以内に、一致するノード間で読み取りを分散します。

このガイドで説明されている関数の詳細については、次のAPIドキュメントを参照してください。

戻る

TLS の構成