Overview
このページでは、 Cドライバーで使用できる接続オプションと、それらをMongoDB接続に適用する方法について説明します。
接続オプションを指定する方法
次のセクションでは、接続オプションを指定する方法について説明します。
接続文字列の使用
接続文字列をmonogoc_client_t 構造に渡す場合は、接続オプションを <name>=<value> ペアとして string に含めることができます。次の例では、接続文字列には、値が 60000 である connectTimeoutMS オプションと、値が true である tls オプションが含まれています。
mongoc_init(); // Specifies the connection options in the connection string const char *uri = "mongodb+srv://localhost:27017/?connectTimeoutMS=60000&tls=true"; // Creates a new client mongoc_client_t *client = mongoc_client_new_from_uri_with_error(uri, &error); if (!client) { fprintf(stderr, "%s\n", error.message); goto cleanup; } // Use client... cleanup: mongoc_client_destroy(client); mongoc_uri_destroy(uri);
接続文字列で指定できるオプションの詳細については、 MongoDB Serverマニュアルの 接続文字列オプション を参照してください。
URI オプションAPI の使用
URI オプションを使用すると、接続文字列ではなくコードで接続設定を構成できます。このように接続を構成すると、実行時に設定を変更しやすくなり、コンパイル中にエラーを検出しやすくなり、接続文字列よりも多くの構成オプションが提供されます。
URI オプションを使用して接続オプションを設定するには、次の手順を実行します。
接続文字列を使用して
mongoc_uri_t構造体を作成しますURI オプション関数を使用して、必要な接続オプションを指定します
URI を に渡し、その URI で新しいクライアントを作成します
mongoc_client_new_from_uri()
次のコード例は、前述の手順を実行する方法を示しています。
mongoc_uri_t *uri = mongoc_uri_new_with_error("mongodb+srv://localhost:27017/", &error); if (!uri) { fprintf(stderr, "%s\n", error.message); goto cleanup; } // Specifies the connection options by using the URI options API if (!mongoc_uri_set_option_as_int32(uri, MONGOC_URI_CONNECTTIMEOUTMS, 60000)) { fprintf(stderr, "Failed to set '%s'\n", MONGOC_URI_CONNECTTIMEOUTMS); goto cleanup; } if (!mongoc_uri_set_option_as_bool(uri, MONGOC_URI_TLS, true)) { fprintf(stderr, "Failed to set '%s'\n", MONGOC_URI_TLS); goto cleanup; } // Creates a new client client = mongoc_client_new_from_uri_with_error(uri, &error); if (!client) { fprintf(stderr, "%s\n", error.message); goto cleanup; } // Use client... cleanup: mongoc_client_destroy(client); mongoc_uri_destroy(uri);
接続オプション
次のセクションでは、 Cドライバーで使用できる接続オプションと、接続文字列を直接または URI オプションを使用してそれらを指定する方法について説明します。
レプリカセット オプション
直接接続
すべての 操作をホストに強制的にディスパッチするかどうかを指定します。このオプションを指定すると、ドライバーは SRV 接続形式を受け入れません。代わりに、標準の接続 URI形式を使用する必要があります。 SRV 接続と標準接続形式の詳細については、 「接続文字列」ガイド を参照してください。
デフォルト値は false です。複数のホスト名を指定する場合、このプロパティをfalse に設定する必要があります。
mongoc_uri_t *uri = mongoc_uri_new("mongodb://localhost:27017/?directConnection=true");
レプリカセット
接続するレプリカセットの名前。 デフォルト値は null です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?replicaSet=yourReplicaSet");
直接接続
すべての 操作をホストに強制的にディスパッチするかどうかを指定します。このオプションを指定すると、ドライバーは SRV 接続形式を受け入れません。代わりに、標準の接続 URI形式を使用する必要があります。 SRV 接続と標準接続形式の詳細については、 「接続文字列」ガイド を参照してください。
デフォルト値は false です。複数のホスト名を指定する場合、このプロパティをfalse に設定する必要があります。
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_DIRECTCONNECTION, true);
レプリカセット
接続するレプリカセットの名前。 デフォルト値は null です。
mongoc_uri_set_option_as_utf8(uri, MONGOC_URI_REPLICASET, "yourReplicaSet");
TLS のオプション
TLS の有効化
サーバーへの接続に TLS を必要とするかどうかを指定します。"mongodb+srv" のスキームを使用するか、他の TLS オプションを指定する場合、このオプションはデフォルトで true になります。それ以外の場合、デフォルトは false になります。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?tls=true");
AllowInsecureTls
TLS 制約を可能な限り緩和するかどうかを指定します。これには、無効な証明書またはホスト名の不一致を許可することが含まれます。デフォルト値は false です。
次のコード例は、このオプションを true に設定する方法を示しています。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?tls=true&tlsAllowInvalidCertificates=true");
TLS による証明書失効チェックの無効化
TLS ハンドシェイク中に証明書失効チェックを無効にするかどうか。デフォルト値は false です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?tls=true&tlsDisableCertificateRevocationCheck=true");
SSLオプション
TLS/SSL オプションには、クライアント証明書、失効処理、TLS/SSL プロトコルの有効化と無効化などがあります。デフォルト値は null です。
このオプションは、URI オプションを使用してのみ設定できます。 SSL オプションを設定する方法については、 タブの下の「 SSL オプション 」セクションを参照してください。MongoC URI Option
TLS の有効化
サーバーへの接続に TLS を必要とするかどうかを指定します。"mongodb+srv" のスキームを使用するか、他の TLS オプションを指定する場合、このオプションはデフォルトで true になります。それ以外の場合、デフォルトは false になります。
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_TLS, true);
AllowInsecureTls
TLS 制約を可能な限り緩和するかどうかを指定します。これには、無効な証明書またはホスト名の不一致を許可することが含まれます。デフォルト値は false です。
次のコード例は、このオプションを true に設定する方法を示しています。
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_TLSINSECURE, true);
TLS による証明書失効チェックの無効化
TLS ハンドシェイク中に証明書失効チェックを無効にするかどうか。デフォルト値は false です。
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_TLSDISABLECERTIFICATEREVOCATIONCHECK, true);
SSLオプション
TLS/SSL オプションには、クライアント証明書、失効処理、TLS/SSL プロトコルの有効化と無効化などがあります。デフォルト値は null です。
SslSettings.CheckCertificateRevocation が false に設定され、AllowInsecureTls が true に設定されている場合、 Cドライバーは例外をスローします。
mongoc_client_t *client; mongoc_ssl_opt_t ssl_opts = {0}; ssl_opts.pem_file = "/path/to/client-cert.pem"; ssl_opts.pem_pwd = "password"; ssl_opts.ca_file = "/path/to/ca.pem"; ssl_opts.allow_invalid_hostname = false; mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?tls=true"); client = mongoc_client_new_from_uri(uri); mongoc_client_set_ssl_opts(client, &ssl_opts);
TLS オプションの詳細については、 「トランスポート層セキュリティ(TLS)の構成」ガイドをご覧ください。
タイムアウト オプション
接続タイムアウト
ドライバーがタイムアウトする前に、サーバーへの単一の TCP ソケット接続を確立しようとする時間の長さ。デフォルト値は 10 秒です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?connectTimeoutMS=60000");
ソケット タイムアウト
ドライバーがタイムアウトする前にソケット上で送信または受信を試みる時間の長さ。デフォルト値はオペレーティング システムによって設定されます。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?socketTimeoutMS=60000");
圧縮オプション
接続プール オプション
MaxPool Size
ドライバーが接続プール内に作成できるクライアントまたは接続の最大数。このカウント数には、使用中の接続が含まれています。デフォルト値は 100 です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?maxPoolSize=150");
キュー タイムアウトの待機
ドライバーがタイムアウトする前にサーバーの接続プールから接続をチェックアウトしようとする時間の長さ。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?waitQueueTimeoutMS=30000");
Max Connection Pool Size
ドライバーが接続プール内に作成できるクライアントまたは接続の最大数。このカウント数には、使用中の接続が含まれています。デフォルト値は 100 です。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_MAXPOOLSIZE, 150)
mongoc_client_pool_t 構造を使用して最大接続プールサイズを設定することもできます。
mongoc_client_pool_t *pool = mongoc_client_pool_new(uri); // Specifies max pool size mongoc_client_pool_max_size(pool, 150);
キュー タイムアウトの待機
ドライバーがタイムアウトする前にサーバーの接続プールから接続をチェックアウトしようとする時間の長さ。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_WAITQUEUETIMEOUTMS, 30000);
書込み保証(write concern)オプション
w
書込み保証 (write concern)の w コンポーネント。指定された数のMongoDBインスタンスに書込み (write)操作が反映されたことの確認応答を要求します。デフォルト値は、アービタと投票ノードの数に応じて "majority" または 1 です。w オプションの詳細については、 MongoDB Serverマニュアルの書込み保証を参照してください。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?w=2");
w タイムアウト
書込み保証 (write concern)の時間制限を指定する書込み保証 (write concern)の wtimeoutms コンポーネント。wtimeout オプションの詳細については、 MongoDB Serverマニュアルの書込み保証を参照してください。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?wTimeoutMS=5000");
Journal
書込み保証 (write concern)の j コンポーネントは、 MongoDBインスタンスがオンディスクのジャーナルに書き込んだことの確認を要求します。デフォルト値は、writeConcernMajorityJournalDefault 設定の値によって異なります。j オプションの詳細については、 MongoDB Serverマニュアルの「 書込み保証 」を参照してください。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?journal=true");
w
書込み保証 (write concern)の w コンポーネント。指定された数のMongoDBインスタンスに書込み (write)操作が反映されたことの確認応答を要求します。デフォルト値は、アービタと投票ノードの数に応じて "majority" または 1 です。w オプションの詳細については、 MongoDB Serverマニュアルの書込み保証を参照してください。
MONGOC_URI_W オプションを使用して w を設定できます。
// Use the int32 version of the mongoc_uri_t set function to set integer values mongoc_uri_set_option_as_int32(uri, MONGOC_URI_W, 2); // Use the utf8 version of the mongoc_uri_t set function to set string values mongoc_uri_set_option_as_utf8(uri, MONGOC_URI_W, "majority");
mongoc_write_concern_t 構造を使用して w を設定することもできます。
// Creates a write concern structure mongoc_write_concern_t *write_concern = mongoc_write_concern_new(); // Sets w=2 mongoc_write_concern_set_w(write_concern, 2); mongoc_client_set_write_concern(client, write_concern);
w タイムアウト
書込み保証 (write concern)の時間制限を指定する書込み保証 (write concern)の wtimeoutms コンポーネント。wtimeout オプションの詳細については、 MongoDB Serverマニュアルの書込み保証を参照してください。
MONGOC_URI_WTIMEOUTMS オプションを使用して wtimeoutms を設定できます。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_WTIMEOUTMS, 5000);
mongoc_write_concern_t 構造を使用して wtimeoutms を設定することもできます。
// Creates a write concern structure mongoc_write_concern_t *write_concern = mongoc_write_concern_new(); // Sets w=2 mongoc_write_concern_set_wtimeout(write_concern, 5000); // Apply write concern to client mongoc_client_set_write_concern(client, write_concern);
Journal
書込み保証 (write concern)の j コンポーネントは、 MongoDBインスタンスがオンディスクのジャーナルに書き込んだことの確認を要求します。デフォルト値は、writeConcernMajorityJournalDefault 設定の値によって異なります。j オプションの詳細については、 MongoDB Serverマニュアルの「 書込み保証 」を参照してください。
MONGOC_URI_JOURNAL オプションを使用して journal を設定できます。
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_JOURNAL, true);
mongoc_write_concern_t 構造を使用して journal を設定することもできます。
// Creates a write concern structure mongoc_write_concern_t *write_concern = mongoc_write_concern_new(); // Sets journal to true mongoc_write_concern_set_journal(write_concern, true); // Apply write concern to client mongoc_client_set_write_concern(client, write_concern);
readConcern オプション
読み取り保証レベル
クライアントの読み取り保証 (read concern) ) レベル詳細については、 MongoDB Serverマニュアルの「 読み取り保証 」に関する参照を参照してください。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?readConcernLevel=local");
読み取り保証レベル
クライアントの読み取り保証 (read concern) ) レベル詳細については、 MongoDB Serverマニュアルの「 読み取り保証 」に関する参照を参照してください。
読み取り保証 (read concern)レベルは、MONGOC_URI_READCONCERNLEVEL オプションを使用して設定できます。
mongoc_uri_set_option_as_utf8(uri, MONGOC_URI_READCONCERNLEVEL, "local")
mongoc_read_concern_t 構造を使用して読み取り保証 (read concern)レベルを設定することもできます。
mongoc_read_concern_t *read_concern = mongoc_read_concern_new(); // Set the read concern level to "local" mongoc_read_concern_set_level(read_concern, MONGOC_READ_CONCERN_LEVEL_LOCAL); mongoc_client_set_read_concern(client, read_concern);
設定オプションを読む
読み込み設定 (read preference)
クライアントのデフォルトの読み取り設定。デフォルト値はprimary です。詳細については、 MongoDB Serverマニュアルの「 読み込み設定 」を参照してください。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?readPreference=primaryPreferred");
Max Staleness
Max Staleness 秒は、セカンダリで発生してもサーバー選択の対象となる最長のレプリケーションラグ を、ウォール クロック時間で表します。 maxStalenessSeconds に許可される最小値は 90 秒です。このオプションは、非プライマリの読み込み設定 (read preference)で使用する必要があります。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?readPreference=secondary&maxStalenessSeconds=120");
LocalThreshold
サーバーの適格性のレイテンシウィンドウ。サーバーの往復時間が、最速のサーバーの往復時間とこの値よりも長い時間がかかる場合、そのサーバーは選択対象になりません。デフォルト値は 15 ミリ秒です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?localThresholdMS=150");
読み込み設定 (read preference)
クライアントのデフォルトの読み取り設定。デフォルト値はprimary です。詳細については、 MongoDB Serverマニュアルの「 読み込み設定 」を参照してください。
読み込み設定 (read preference)は、mongoc_read_prefs_t 構造を使用して設定できます。
mongoc_client_t *client = mongoc_client_new("mongodb+srv://localhost:27017/"); // Specifies the read preference mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new(MONGOC_READ_PRIMARY_PREFERRED); mongoc_client_set_read_prefs(client, read_prefs);
MONGOC_URI_READPREFERENCE オプションを使用して読み込み設定 (read preference)を設定することもできます。
mongoc_uri_set_option_as_utf8(uri, MONGOC_URI_READPREFERENCE, "primaryPreferred")
Max Staleness
Max Staleness 秒は、セカンダリで発生してもサーバー選択の対象となる最長のレプリケーションラグ を、ウォール クロック時間で表します。 maxStalenessSeconds に許可される最小値は 90 秒です。このオプションは、非プライマリの読み込み設定 (read preference)で使用する必要があります。
MONGOC_URI_MAXSTALENESSSECONDS オプションを使用して最大古さを設定できます。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_MAXSTALENESSSECONDS, 120);
mongoc_read_prefs_t 構造を使用して最大古さを設定することもできます。
mongoc_client_t *client = mongoc_client_new("mongodb+srv://localhost:27017/"); mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new(MONGOC_READ_SECONDARY); // Specifies max staleness to 120 seconds mongoc_read_prefs_set_max_staleness_seconds(read_prefs, 120); mongoc_client_set_read_prefs(client, read_prefs);
LocalThreshold
サーバーの適格性のレイテンシウィンドウ。サーバーの往復時間が、最速のサーバーの往復時間とこの値よりも長い時間がかかる場合、そのサーバーは選択対象になりません。デフォルト値は 15 ミリ秒です。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_LOCALTHRESHOLDMS, 150);
認証オプション
認証メカニズム
ドライバーがMongoDB Serverへの認証に使用するメカニズム。認証メカニズムを指定しない 場合、ドライバーはサーバーのバージョンに応じてSCRAM-SHA-1 またはSCRAM-SHA-256 のいずれかを使用します。利用可能な認証メカニズムの詳細については、 認証メカニズム または エンタープライズ認証メカニズム のガイドを参照してください。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?authSource=admin&authMechanism=GSSAPI");
認証メカニズム
ドライバーがMongoDB Serverへの認証に使用するメカニズム。認証メカニズムを指定しない 場合、ドライバーはサーバーのバージョンに応じてSCRAM-SHA-1 またはSCRAM-SHA-256 のいずれかを使用します。利用可能な認証メカニズムの詳細については、 認証メカニズム または エンタープライズ認証メカニズム のガイドを参照してください。
mongoc_uri_set_auth_mechanism(uri, "GSSAPI");
サーバーの選択と検出オプション
ハートビート頻度
サーバー監視チェックの間隔。 500 ミリ秒以上である必要があります。デフォルト値は、プール型(マルチスレッド)モードでは 10000 ミリ秒(10 秒)、非プール(シングルスレッド)モードでは 60000 ミリ秒(60 秒)です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?heartbeatFrequencyMS=5000");
サーバー選択タイムアウト
ドライバーがタイムアウトする前にサーバーを選択しようとする時間の長さ。デフォルト値は 30000 ミリ秒(30 秒)です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?serverSelectionTimeoutMS=40000");
ソケット チェック間隔
シングル スレッド クライアントにのみ適用されます。時間内にソケットが使用されなかった場合、ドライバーは再度使用される前に簡単な "hello" 呼び出しで接続をチェックします。デフォルトは 5000 ミリ秒(5 秒)です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?socketCheckIntervalMS=10000");
ハートビート頻度
サーバー監視チェックの間隔。 500 ミリ秒以上である必要があります。デフォルト値は、プール型(マルチスレッド)モードでは 10000 ミリ秒(10 秒)、非プール(シングルスレッド)モードでは 60000 ミリ秒(60 秒)です。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_HEARTBEATFREQUENCYMS, 5000);
サーバー選択タイムアウト
ドライバーがタイムアウトする前にサーバーを選択しようとする時間の長さ。デフォルト値は 30000 ミリ秒(30 秒)です。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_SERVERSELECTIONTIMEOUTMS, 40000);
ソケット チェック間隔
シングル スレッド クライアントにのみ適用されます。時間内にソケットが使用されなかった場合、ドライバーは再度使用される前に簡単な "hello" 呼び出しで接続をチェックします。デフォルトは 5000 ミリ秒(5 秒)です。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_SOCKETCHECKINTERVALMS, 10000);
再試行オプション
その他のオプション
アプリケーション名
接続ハンドシェイクの一環として、ドライバーがクライアントのメタデータでサーバーに渡すアプリ名。サーバーは接続を確立すると、この値をMongoDBログに出力します。この値は、スロー クエリ ログとプロファイル コレクションにも記録されます。デフォルト値は空です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?appName=yourAppName");
ロード バランシング
ドライバーが ロードバランサーに接続しているかどうかを指定します。このプロパティは、次の条件が すべて 満たされている場合にのみ、 true に設定できます。
ホスト名を 1 つだけ指定
レプリカセットに接続していません。
SrvMaxHostsプロパティを使用していませんDirectConnectionプロパティを使用していません
デフォルト値は false です。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?loadBalanced=true");
SrvMaxHosts
シードリストを最初に設定するとき、または SRV ポーリング中にトポロジーに新しいホストを追加するときにランダムに選択する SRV 結果の最大数。デフォルト値は 0 です。
このプロパティは、接続文字列スキームが ConnectionStringScheme.MongoDBPlusSrv に設定されている場合にのみ使用できます。レプリカセットに接続する場合は、 を使用できません。
mongoc_uri_t *uri = mongoc_uri_new("mongodb+srv://localhost:27017/?srvMaxHosts=5");
アプリケーション名
接続ハンドシェイクの一環として、ドライバーがクライアントのメタデータでサーバーに渡すアプリ名。サーバーは接続を確立すると、この値をMongoDBログに出力します。この値は、スロー クエリ ログとプロファイル コレクションにも記録されます。デフォルト値は空です。
mongoc_uri_set_option_as_utf8(uri, MONGOC_URI_APPNAME, "yourAppName");
ロード バランシング
ドライバーが ロードバランサーに接続しているかどうかを指定します。このプロパティは、次の条件が すべて 満たされている場合にのみ、 true に設定できます。
ホスト名を 1 つだけ指定
レプリカセットに接続していません。
SrvMaxHostsプロパティを使用していませんDirectConnectionプロパティを使用していません
デフォルト値は false です。
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_LOADBALANCED, true);
SrvMaxHosts
シードリストを最初に設定するとき、または SRV ポーリング中にトポロジーに新しいホストを追加するときにランダムに選択する SRV 結果の最大数。デフォルト値は 0 です。
このプロパティは、接続文字列スキームが ConnectionStringScheme.MongoDBPlusSrv に設定されている場合にのみ使用できます。レプリカセットに接続する場合は、 を使用できません。
mongoc_uri_set_option_as_int32(uri, MONGOC_URI_SRVMAXHOSTS, 5);
詳細情報
このページで使用されているタイプの詳細については、次のAPIドキュメントを参照してください。