AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

このガイドでは、 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();

警告

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

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

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

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

次の例では、test_databaseデータベースを削除しています。

auto db = client["test_database"];
db.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;
mongocxx::read_concern rc;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
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;
mongocxx::write_concern wc;
rc.acknowledge_level(mongocxx::read_concern::level::k_local);
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) を持つレプリカセットに接続すると、ドライバーはレイテンシーウィンドウ内の最も近い適格なレプリカセットから読み込みます。シャーディングされたクラスターに接続すると、ドライバーはレイテンシーウィンドウ内のアクセス可能なすべての mongos インスタンスから選択します。読み込み設定 (read preference) モードの詳細については、「読み込み設定 (read preference)」を参照してください。

デフォルトで、ドライバーは最も近い適格なサーバーの ping 時間が 15 ミリ秒以内であるサーバーのみを使用します。

例えば、レプリカセットに 5 つのノードがあり、最も近いノードの ping 時間が 5 ミリ秒であるとします。デフォルトの localThresholdMS が 15 ミリ秒の場合、次の表に示すように、ping 時間が 20 ミリ秒以下のノードのみがレイテンシ ウィンドウ内にあります。

Host
タイプ
ping 時間
レイテンシ ウィンドウ内

host1

原発

5ミリ秒

はい

host2

セカンダリ

9ミリ秒

はい

host3

セカンダリ

13ミリ秒

はい

host4

セカンダリ

24ミリ秒

No

host5

セカンダリ

42ミリ秒

No

レイテンシウィンドウを調整するには、接続文字列URI に localThresholdMS パラメータを含めます。

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

mongocxx::uri uri{"mongodb://localhost:27017/?localThresholdMS=35"};
mongocxx::client client{uri};

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

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