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

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

項目一覧

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

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

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

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

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

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

データベースにアクセスするには、mongocxx::clientオブジェクトで database() 関数を呼び出し、データベース名を引数として渡します。

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

auto db = client.database("test_database");

あるいは、次のコードに示すように、mongocxx::client[] 演算子を database() 関数の省略形として使用することもできます。

auto db = client["test_database"];

コレクションにアクセスするには、mongocxx::databaseオブジェクトで collection() 関数を呼び出し、コレクション名を引数として渡します。

次の例では、"test_collection" という名前のコレクションにアクセスします。

auto coll = database.collection("test_collection");

あるいは、次のコードに示すように、mongocxx::database[] 演算子を collection() 関数の省略形として使用することもできます。

auto coll = database["test_collection"];

Tip

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

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

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

auto coll = database.create_collection("example_collection");

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

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

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

auto cursor = database.list_collections();
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
Collection: { "name" : "test_collection", "type" : "collection", ...}
Collection: { "name" : "example_collection", "type" : "collection", ... }

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

auto list = database.list_collection_names();
for(auto&& name : list) {
std::cout << name << std::endl;
}
test_collection
example_collection

カーソルの反復処理の詳細については、「 カーソルからのデータへのアクセス 」ガイドをご覧ください。

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

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

auto coll = database["test_collection"];
coll.drop();

警告

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

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

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

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

デフォルトでは 、データベースは mongocxx::clientオブジェクトからこれらの設定を継承し、コレクションはデータベースからこれらを継承します。ただし、データベースまたはコレクションで次のいずれかの関数を使用することで、これらの設定を変更できます。

  • read_preference()

  • read_concern()

  • write_concern()

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

この例では、次の関数を使用してデータベースの読み取り設定を構成する方法を示します。

  • read_preference(): 読み込み設定( 読み込み設定 (read preference)を に設定します k_secondary

  • read_concern():読み取り保証 (read concern)を に設定します k_majority

auto db = client["test_database"];
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
mongocxx::read_concern rc;
rc.acknowledge_level(mongocxx::read_concern::level::k_majority);
db.read_preference(rp);
db.read_concern(rc);

Tip

各読み込み設定( 読み込み設定 (read preference) )と読み取り保証( 読み取り保証 (read concern) )オプションの説明については、次のAPIドキュメントを参照してください。

この例では、次の関数を使用してコレクションの読み取りおよび書込み保証 ( 書込み保証 (write concern) ) を指定する方法を示します。

  • read_concern():読み取り保証 (read concern)を に設定します k_local

  • write_concern(): 書込み保証 ( 書込み保証 (write concern)を に設定します k_acknowledged

auto coll = client["test_database"]["test_collection"];
mongocxx::read_concern rc;
rc.acknowledge_level(mongocxx::read_concern::level::k_local);
mongocxx::write_concern wc;
wc.acknowledge_level(mongocxx::write_concern::level::k_acknowledged);
coll.read_concern(rc);
coll.write_concern(wc);

Tip

読み取り保証と書込み保証 (write concern)の各レベルの説明については、次のAPIドキュメントを参照してください。

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

デフォルトでは 、 C++ドライバーは、読み取り元ノードを選択するときに タグを無視します。 C++ドライバーに特定のタグを優先するように指定するには、mongocxx::read_preferenceオブジェクトを作成し、その tags() ノード関数を呼び出します。希望するタグを配列引数として tags() に渡します。

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

auto tag_set_ny = make_document(kvp("dc", "ny"));
auto tag_set_sf = make_document(kvp("dc", "sf"));
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
rp.tags(make_array(tag_set_ny, tag_set_sf).view());

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

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

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

mongocxx::uri uri("mongodb://localhost:27017/?localThresholdMS=35");
mongocxx::client client(uri);

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

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

戻る

トランザクション