Docs Menu
Docs Home
/ / /
Ruby MongoDB ドライバー
/

クライアントの作成

項目一覧

  • 使用 Mongo::Client
  • ブロック構文
  • データベース選択
  • 接続タイプ
  • スタンドアロン サーバー接続
  • レプリカセット接続
  • シャーディングされたクラスターの接続
  • 直接接続
  • ロード バランサー接続
  • MongoDB Atlas 接続
  • AWS Lambda から MongoDB Atlas に接続する
  • SRV URI ノート
  • クライアント オプション
  • Ruby オプション
  • URI オプション
  • タイムアウト オプション
  • server_selection_timeout
  • socket_timeout
  • connect_timeout
  • max_time_ms
  • wtimeout
  • TLS 接続
  • TLS と SSL のオプション名
  • TLS 接続の有効化
  • クライアント TLS 証明書の指定
  • 変更 SSLContext
  • CA 証明書の指定
  • OCSP 検証
  • IPv4/IPv6 接続
  • TCP キープアライブ構成
  • 接続プーリング
  • フォーク サーバーでの使用
  • プロセス フォークの手動処理
  • トラブルシューティング
  • 再試行可能な読み取り
  • モダンな再試行可能な読み取り
  • レガシー再試行可能な読み取り
  • 再試行可能な読み取りの無効化
  • 再試行可能な書き込み
  • モダンな再試行可能な書込み
  • レガシー再試行可能な書込み
  • 再試行可能な書き込みの無効化
  • ログ記録
  • ロガーレベルの変更
  • 切り捨て
  • 圧縮
  • Server API Parameters
  • 開発構成
  • 本番構成
  • 機能フラグ

MongoDB 配置に接続するには、 Mongo::Clientオブジェクトを作成します。 ``Mongo::Client`` コンストラクターに、ホストとオプションのリストまたは 接続string URIを指定します。 クライアントの選択データベースのデフォルトはadminです。

デフォルトでは、ドライバーは配置で使用されるトポロジーを自動的に検出し、適切に接続します。

ローカル スタンドアロン MongoDB 配置に接続するには、サーバーのホストとポートを指定します。 ほとんどの場合は、接続するデータベース名も指定します。データベース名が指定されていない場合、クライアントはadminデータベースを使用します。

Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb')
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017/mydb")

注意

ホスト名localhostはドライバーによって特別に扱われ、IPv4 アドレスのみに解決されます。

MongoDB Atlas に接続するには、Atlas 配置 URI を指定します。

Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/mydb?w=majority")

ドライバーはクラスター内のすべてのノードを検出し、必要に応じてノードに接続します。

Mongo::Client オブジェクトを作成する別の方法は、ブロック構文を使用することです。

Mongo::Client.new(...) do |client|
# work with the client
end

この構文を使用してクライアントを作成すると、ブロックの実行が完了した後にクライアントは自動的に閉じられることに注意してください。

デフォルトでは、クライアントはadminデータベースに接続します。

adminデータベースは、管理タスクとユーザーやロールなどの管理データの保存によく使用される MongoDB の特別なデータベースです(ただし、ユーザーとロールは他のデータベースでも定義されている場合もあります)。 シャーディングされたクラスターでは、 adminデータベースはシャード サーバーではなくコンフィギュレーションサーバーに存在します。 adminデータベースを通常の操作(アプリケーション データの保存など)に使用することも可能ですが、これは推奨されず、アプリケーションは使用するデータベースを明示的に指定する必要があります。

データベースは、 Clientの構築中に指定できます。

# Using Ruby client options:
client = Mongo::Client.new(['localhost'], database: 'mydb')
# Using a MongoDB URI:
client = Mongo::Client.new('mongodb://localhost/mydb')

Clientインスタンスの場合、 useメソッドを呼び出して、指定されたデータベースで構成された新しいClientインスタンスを取得できます。

client = Mongo::Client.new(['localhost'], database: 'mydb')
admin_client = client.use('admin')
# Issue an administrative command
admin_client.database.command(replSetGetConfig: 1).documents.first

MongoDB には他にも特殊なデータベースがあり、記載された目的でのみ使用してください。

  • コンフィギュレーションデータベース 。

  • ローカルデータベース。

  • $externalデータベース。 PLAINKerberos 、およびX. 509認証メカニズムで使用されます。

ドライバーはデフォルトで、接続するように指示された配置のタイプを検出し(負荷分散された配置を除く)、配置タイプに一致するように動作します。 以下のサブセクションでは、各配置タイプでドライバーがどのように動作するか、また、自動配置タイプの検出をバイパスして特定の動作を強制する方法について説明します。

配置タイプの検出は、ドライバーが接続を指示されたサーバーのいずれかから最初の応答を受け取ったときに行われることに注意してください(負荷分散モードが要求されていない限り、以下を参照してください)。 基礎となる配置が別のタイプに置き換えられた場合でも、ドライバーは検出されたトポロジーまたは構成されたトポロジーに残ります。 特に、レプリカセットを同じアドレスにあるシャーディングされたクラスターに置き換える場合は、クライアント インスタンスがシャーディングされたクラスターと通信するために(アプリケーションを再起動するなど)再作成する必要があります。

負荷分散された配置の自動検出は現在サポートされていません。 負荷分散された配置は、基礎となるタイプの配置として扱われます。これらは通常、シャーディングされたクラスターになります。 負荷分散された配置をシャーディングされたクラスターとして扱う場合、ドライバーは正しく動作しないため、配置が負荷分散されている場合は、クライアントをロード バランサーに接続するように明示的に構成する必要があります。

配置が単一のサーバーであり、スタンドアロン配置とも呼ばれる場合、すべての操作は指定されたサーバーに指示されます。

サーバーがシャットダウンして レプリカセット ノードに置き換えられた場合、ノードが または セカンダリになっても、ドライバーはすべての操作をそのノードに送信し続けます。

スタンドアロン接続を強制するには、以下の「直接接続」セクションを参照してください。

レプリカセットに接続するときは、レプリカセット内の任意のノードのアドレスをドライバーに渡すのに十分です。 ノードはプライマリである必要はなく、 非表示 ノードにすることもできます。 その後、ドライバーは残りのノードを自動的に検出します。

ただし、レプリカセットの一部であるすべてのノードを指定することをお勧めします。これにより、1 つ以上のノードが使用できなくなった場合(たとえば、メンテナンスや再構成により)、ドライバーは引き続きレプリカセットに接続できます。

レプリカセット接続の例:

Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb')
Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ], database: 'mydb')
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb")

接続時にドライバーがレプリカセット名を検証するようにするには、 replica_set Ruby オプションまたはreplicaSet URI オプションを使用してドライバーを渡します。

Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ],
database: 'mydb', replica_set: 'myapp')
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb?replicaSet=myapp")

配置がレプリカセットではない、または別のレプリカセット名を使用している場合、すべての操作は失敗します(期待されるレプリカセットがサーバーによって返されるまで)。

レプリカセット名を指定せずに、レプリカセット接続を強制することもできます。 通常、そのようなことは不要であり、非推奨です。

Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ],
database: 'mydb', connect: :replica_set)
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb?connect=replica_set")

レプリカセットとして配置された MongoDB Atlas クラスターに接続するには、URI に接続します。

Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority")

SRV URI を使用する場合は、 SRV URI ノートを確認してください 。

シャーディングされたクラスターの配置に接続するには、 mongosルーターのアドレスを指定します。

Mongo::Client.new([ '1.2.3.4:27017', '1.2.3.5:27017' ], database: 'mydb')
Mongo::Client.new("mongodb://1.2.3.4:27017,1.2.3.5:27017/mydb")

レプリカセット接続とは異なり、配置内に存在するmongosルーターのサブセットに接続することもできます。 ドライバーは各 ルーターを監視し、利用可能なものを使用します(つまり、ドライバーは通常、障害やメンテナンスにより使用できなくなった個々のルーターを処理します)。 ルーターのリストを明示的に指定すると、ドライバーは設定されている可能性のある残りの ルーターを検出せず、接続を試行しません。

ドライバーは、認識されているルーター間で操作負荷を自動的に分散します。

シャーディングされたクラスターとして配置された MongoDB Atlas クラスターに接続するには、 URI に接続します。

Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority")

ドライバーが SRV URI 経由でシャーディングされたクラスターに接続すると、URI で指定されたアドレスの SRV レコードで変更を定期的にポーリングし、 mongosホストをサーバー リストに自動的に追加および削除します。シャーディングされたクラスターに追加および削除された。

シャーディングされたクラスター接続を強制するには、 connect: :shardedオプションを使用します。 通常、そのようなことは不要であり、非推奨です。

Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ],
database: 'mydb', connect: :sharded)
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb?connect=sharded")

SRV URI を使用する場合は、 SRV URI ノートを確認してください 。

配置タイプの検出を無効にして、特定のサーバー上ですべての操作を強制的に実行するには、 direct_connectionオプションを指定します。

Mongo::Client.new([ '1.2.3.4:27017' ], database: 'mydb', direct_connection: true)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?directConnection=true")

あるいは、非推奨のconnect: :directオプションも同等です。

Mongo::Client.new([ '1.2.3.4:27017' ], database: 'mydb', connect: :direct)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?connect=direct")

直接接続モードは、特定のレプリカセット ノードで操作を実行するのに最も便利ですが、基礎のサーバーのタイプ変更(例: レプリカセット ノードからmongosルーター、またはその逆)も許可します。

他の配置タイプとは異なり、ドライバーは現在、負荷分散された配置を自動的に検出しません。

ロード バランサーに接続するには、 load_balanced: true Ruby オプションまたはloadBalanced=true URI オプションを指定します。

Mongo::Client.new([ '1.2.3.4:27017' ], database: 'mydb', load_balanced: true)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?loadBalanced=true")

これらのオプションを使用する場合、指定されたサーバーがロード バランサーでない場合、クライアントはすべての操作を失敗します(サーバーがロード バランサーになるまで)。

識別されない場合でもサーバーをロード バランサーとして扱うには、 connect: :load_balanced Ruby オプションまたはconnect=load_balanced URI オプションを使用します。

Mongo::Client.new([ '1.2.3.4:27017' ],
database: 'mydb', load_balanced: true, connect: :load_balanced)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?loadBalanced=true&connect=load_balanced")

MongoDB上のAtlas Mongo::Client配置に接続するには、まずクラスターの接続string とその他のクライアント オプションを使用して インスタンスを作成します。

新しいサーバー バージョンにアップグレードするときに重大な変更を回避するために、 Stable APIバージョンをクライアント オプションとして設定できます。

次のコードは、MongoDB 配置に接続するときに接続文字列と Stable API クライアント オプションを指定して、接続が成功したことを確認する方法を示しています。

require 'mongo'
# Replace the placeholders with your credentials
uri = "mongodb+srv://<username>:<password>@cluster0.sample.mongodb.net/?retryWrites=true&w=majority"
# Set the server_api field of the options object to Stable API version 1
options = { server_api: { version: "1" } }
# Create a new client and connect to the server
client = Mongo::Client.new(uri, options)
# Send a ping to confirm a successful connection
begin
admin_client = client.use('admin')
result = admin_client.database.command(ping: 1).documents.first
puts "Pinged your deployment. You successfully connected to MongoDB!"
rescue Mongo::Error::OperationFailure => ex
puts ex
ensure
client.close
end

AWS Lambda から Atlas に接続する方法については、「AWS Lambda を使用した接続の管理」を参照してください。

ドライバーがmongodb+srv プロトコルURI に接続するときは、次の点に注意してください。

  1. SRV URI ルックアップは、クライアントが構築されるときに同期的に実行されます。 この検索が何らかの理由で失敗した場合、クライアントの構築は例外を除いて失敗します。 クライアントがホストのリストを使用して構築されると、ドライバーはクライアント オブジェクトが存在する限り、それらのホストにアクセスして監視するよう試行します。 これらのホストの 1 つが最初は解決されず、後で解決可能になった場合、ドライバーは使用可能になったときにそのようなホストへの接続を確立できます。 最初の試行で成功する必要があります。必要に応じて、後続のホスト検索はドライバーによって再試行されます。

  2. ドライバーは、SRV レコードに対応する DNS TXT レコードで URI オプションを検索します。 これらのオプションは、URI で指定された URI オプションと Ruby オプションの順に上書きできます。

  3. URI オプションは SRV lookup とは別の DNS クエリで取得されるため、ネットワーク接続が信頼できない環境では、SRV lookup が成功すると URI オプション クエリが失敗する可能性があります。 このような障害により、ドライバーは間違った認証ソースを使用し、認証が失敗します。 これは、認証ソースを明示的に指定することで回避できます。

    Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority&authSource=admin")
  4. 構築されたClientオブジェクトのトポロジーが不明またはシャーディングされたクラスターの場合、ドライバーは指定された SRV DNS レコードの変更の監視を開始し、クラスター内のサーバーのリストを自動的に更新します。 トポロジーが単一またはレプリカセットになると、更新は停止します。

Mongo::Clientのコンストラクターは、ドライバーの動作を構成する多数のオプションを受け入れます。 オプションは、オプション ハッシュで Ruby オプションとして、URI で URI オプションとして、またはその両方で提供できます。 Ruby オプションと類似の URI オプションの両方が指定されている場合は、Ruby オプションが優先されます。

注意

直接渡されるオプションは、シンボルである必要があります。

注意

特に指定されていない限り、時間を処理する Ruby オプションは秒単位で指定されます。

オプション
説明
タイプ
default

:app_name

サーバー バージョン 3.4 以上で接続を確立するときに mongod ログに出力されるアプリケーション名。

String

なし

:auth_mech

使用する認証メカニズムを指定します。 次のいずれかになります。 :gssapi:mongodb_cr:mongodb_x509:plain:scram:scram256 。 GSSAPI (Kerberos)認証には追加の依存関係が必要です。

Symbol

ユーザー認証情報が提供されていない場合、 nilは 。 ユーザー認証情報が指定されている場合、デフォルトはサーバーのバージョンによって異なります。 MongoDB 4.0 以降: ユーザー認証情報が SCRAM-SHA-256 認証をサポートするユーザーに対応する場合は:scram256 、それ以外の場合は:scram 。 MongoDB 3.0-3.6: :scram 。 MongoDB 2.6: :mongodb_cr

:auth_mech_properties

追加の認証メカニズム プロパティを提供します。

プロパティ内のキーは、大文字と小文字を区別せずに解釈されます。 クライアントが作成されると、キーは小文字になります。

Hash

GSSAPI 認証メカニズムを使用する場合、デフォルトのプロパティは{service_name: "mongodb"}です。 それ以外の場合、デフォルトは nil です。

:auth_source

認証ソースを指定します。

String

MongoDB 2.6 以降の場合: 認証情報が提供されている場合は管理者、そうでない場合は現在のデータベース

:auto_encryption_options

自動暗号化を設定するためのオプションのHash

  • :key_vault_client - 暗号化データキーを保存している MongoDB インスタンスに接続されているクライアント( Mongo::Client 、デフォルトは最上位のクライアント インスタンス)。

  • :key_vault_namespace - "database.collection"形式のキーヴォールト コレクションの名前空間( String 、必須)。

  • :kms_providers - KMS構成情報。 キー:local:awsの 1 つまたは両方を指定する必要があります( Hash 、必須)。 このオプションの詳細については、クライアント側暗号化 チュートリアルの「 kms_providersオプション」セクションを参照してください。

  • :schema_map - 暗号化するフィールドを指定する 1 つ以上のコレクションの JSONSchema( Hash 、任意、デフォルトはnil )。

  • :bypass_auto_encryption - データベース操作の実行時に自動暗号化をスキップするかどうか( Boolean 、デフォルトはfalse )。

  • :extra_options - mongocryptd の生成に関連するオプション( Hash 、任意、デフォルトはnil )。

これらのオプションの形式の詳細については、クライアント側暗号化 チュートリアルの「自動暗号化オプション」セクションを参照してください。

Hash

なし

:bg_error_backtrace

試験用。 バックグラウンド スレッドでエラーが発生したときにバックトレースをログに記録するかどうか、またどのようにログに記録するかを制御します。 trueの場合、ドライバーは完全なバックトレースをログに記録します。 正の整数に設定すると、ドライバーはそのバックトレース行数までログを記録します。 falseまたはnilに設定されている場合、バックトレースはログに記録されません。 その他の値はエラーです。

true, false, nil, Integer

なし

:compressors

使用する潜在的なコンプレッサーのリスト(優先順位順)。 ドライバーが圧縮を実装する方法の詳細については、以下を参照してください。

Array<String>

なし

:connect

非推奨。 ドライバーによって通常実行される配置トポロジーの検出を無効にし、クラスター トポロジーを特定のタイプに強制します。 有効な値は、 :direct:load_balanced:replica_set 、または:shardedです。 :load_balancedを使用する場合、クライアントは、接続サーバーがロード バランサーとして自分自身を宣言するかどうかにかかわらず、ロード バランサーに接続されている場合と同じように動作します。

Symbol

なし

:connect_timeout

例外が発生する前に、ソケット接続を確立するための待機時間(秒単位)。 このタイムアウトは SRV DNS レコード解決にも使用されます。 nil0はタイムアウトなしを意味します。 無効なタイムアウト値(負の値や数値以外の値など)が渡されると、クライアントの作成はエラーで失敗します。

Float

10

:database

接続するデータベースの名前。

String

管理者

:direct_connection

指定されたホストに直接接続し、配置トポロジーを検出しません。

Boolean

false

:heartbeat_frequency

サーバー モニターがサーバーの状態を非同期に更新するまでの秒数。

Float

10

:id_generator

ドキュメントの ID を生成するカスタム オブジェクト。 #generate に応答する必要があります。

Object

なし

:load_balanced

ロード バランサーへの接続を要求するかどうか。

Boolean

false

:local_threshold

動作対象の選択可能なサーバーと最も近いサーバーとの間の最大レイテンシを秒単位で指定します。

Float

0.015

:logger

カスタム ロガー。

Object

Logger

:max_connecting

接続プールが並行して確立を試みる接続の最大数。

Integer

2

:max_idle_time

接続プールによって閉じられる前に接続がアイドル状態になる最大時間(秒単位)。

警告:ロード バランサーに接続すると、ドライバーは既存の接続を使用してカーソルを反復処理し(変更ストリームを含む)、トランザクションを実行します。 このオプションでアイドル時間を設定すると、ドライバーが後続の操作に必要な接続を閉じてしまい、それらの操作が失敗する可能性があります。

Integer

なし

:max_pool_size

各サーバーの接続プールの最大サイズ。 このオプションを 0 に設定すると、接続プールの最大サイズ制限が削除され、任意の接続数に拡大できるようになります。

Integer

20

:max_read_retries

レガシー読み取り再試行が使用される場合の読み取り再試行の最大回数。 レガシー読み取り再試行を無効にするには、 を 0 に設定します。

Integer

1

:max_write_retries

レガシー書込み再試行が使用される場合の最大書込み再試行回数。 レガシー書込み再試行を無効にするには、 を 0 に設定します。

Integer

1

:min_pool_size

各サーバーの接続プール内の最小接続数。 プールにこの数の接続が含まれるまで、ドライバーはバックグラウンドで接続を確立します。

Integer

0

:monitoring

監視オブジェクト。

Object

なし

:password

認証するユーザーのパスワード。

String

なし

:platform

サーバー バージョン 3.4 以上で接続を確立するときに mongod ログに出力されるメタデータに含めるプラットフォーム情報。

String

なし

:read

サーバーを選択するための読み込み設定(read preference)モードとタグセットをHashとして指定します。 ハッシュで許可されているキーは、 :mode:tag_sets:max_stalenessです。

{ read:
{ mode: :secondary,
tag_sets: [ "data_center" => "berlin" ],
max_staleness: 5,
}
}

タグセットが指定される場合、それらはハッシュの配列である必要があります。 サーバーは、タグが提供されたタグセット内の 1 つのハッシュと一致する場合、読み込み設定 (read preference) を満たす場合、読み込み設定 (read preference) を満たします。

各タグセットはハッシュである必要があり、サーバー選択に使用される前に内部的にBSON::Documentインスタンスに変換されます。 ハッシュキーは string または記号にすることができます。 キーでは大文字と小文字が区別されます。 ハッシュ値は string である必要があり、レプリカセット構成の値と完全に一致します。

Hash

{ :mode => :primary }

:read_concern

読み取り保証 (read concern) オプションを指定します。 有効なキーはlevelのみで、有効な値は:local:available:majority:snapshot:linearizableです。

Hash

なし

:read_retry_interval

mongos での読み取りが再試行される間隔(秒単位)。

Integer

5

:replica_set

レプリカセットに接続する場合、これはサーバーをフィルタリングするセットの名前です。

String

なし

:retry_writes

ネットワーク エラーによってシングル ステートメント書込み (write) 操作が失敗した場合、ドライバーはサーバー バージョン 3.6 以降に接続すると自動的に再試行します。

Boolean

true

:sdam_proc

クライアントは構築されるとすぐにバックグラウンドで配置の監視を開始するため、クライアントを構築し、別の ステートメントでSDAMイベントにサブスクライブすると、サブスクライブが一部の SDAM イベントを受信しない可能性があります。 :sdam_procオプションを使用すると、SDAM イベントが公開される前に構築されるクライアントにイベント サブスクライブを追加できます。

クライアントのイベント サブスクライブ メカニズムが初期化された後、いずれかのサーバーがクライアントに追加される前に、 Clientを引数として呼び出されるProcを渡します。 このProcを使用して、クライアントで SDAM イベント サブスクライブを設定します。

注: 手順で提供されるProc :sdam_proc is invoked, in particular the cluster is nil at this time. ``:sdam_procClient#subscribeClient#unsubscribeが、渡されたクライアントのみに メソッドと メソッドを呼び出すよう制限する場合、クライアントは完全に構築されていません。

Proc

なし

:server_api

リクエストされたサーバー API バージョン。 これは、次の許可された項目を含むハッシュです: - :version( string ) - :strict(true または false) - :deprecation_errors(true または false)

サーバー API バージョンは Ruby オプションとしてのみ指定でき、URI オプションとしては指定できないこと、およびデータベースおよびコレクション オブジェクトを上書きすることはできないことに注意してください。

クライアントでサーバー API バージョンが変更された場合( with呼び出しによる場合など)、API バージョン ハッシュ全体が新しい仕様に置き換えられます(古いフィールドと新しい個々のフィールドはマージされません)。

Hash

なし

:server_selection_timeout

例外が発生する前に、操作が実行されるよう適切なサーバーが選択されるまで待機する秒数。

Float

30

:socket_timeout

例外が発生する前に、ソケット上で操作が実行されるまで待機する秒数。 nil0はタイムアウトなしを意味します。 無効なタイムアウト値(負の値や数値以外の値など)が渡されると、クライアントの作成はエラーで失敗します。

Float

なし

:srv_max_hosts

シャーディングされたトポロジにドライバーが通信する mongos の最大数。 このオプションを 0 に設定すると、mongos の最大数はなくなります。 指定された URI が:srv_max_hostsを超えるホストに解決される場合、クライアントはランダムに:srv_max_hostsサイズのホストのサブセットを選択します。 クライアント構築中にドライバーが無視したホストは使用されないことに注意してください。 ドライバーによって選択されたホストが使用できなくなると、配置に他の機能的な mongos があっても、クライアントは完全に動作を終了します。

Integer

0

:srv_service_name

SRV DNS クエリで使用するサービス名。

String

mongodb

:ssl

TLS 経由でサーバーに接続するようにクライアントに指示します。

Boolean

false

:ssl_ca_cert

接続のもう一方の側から渡された証明書を検証するために使用される、連結された証明機関証明書を含むファイル パス。 :ssl_verifyには、 :ssl_ca_cert:ssl_ca_cert_string 、または:ssl_ca_cert_object (優先順位順)のいずれかが必要です。

String

なし

:ssl_ca_cert_object

接続先から渡された証明書を検証するために使用される証明機関証明書を表す OpenSSL::X509::Certificate の配列。 :ssl_verifyには、 :ssl_ca_cert:ssl_ca_cert_string 、または:ssl_ca_cert_object (優先順位順)のいずれかが必要です。

Array< OpenSSL::X509::Certificate >

なし

:ssl_ca_cert_string

接続のもう一方の側から渡された証明書を検証するために使用される、連結された証明機関証明書を含む string。 :ssl_verifyには、 :ssl_ca_cert:ssl_ca_cert_string 、または:ssl_ca_cert_object (優先順位順)のいずれかが必要です。

String

なし

:ssl_cert

MongoDB サーバーへのアプリケーションを識別するために使用されるクライアント証明書ファイルへのパス。 ファイルには証明書の秘密キーも含まれている場合があります。その場合、秘密キーはこのオプションによって無視されます。 ファイルには、クライアント証明書から CA 証明書への証明書チェーンを構成する中間証明書も含まれる場合があります。中間証明書はドライバーによって解析され、 extra_chain_cert属性の OpenSSL コンテキストに提供されます。 中間証明書が提供される場合は、 ファイルの最初の証明書であるクライアント証明書に従う必要があります。

このオプションは、存在する場合、 :ssl_cert_stringおよび:ssl_cert_objectオプションよりも優先されます。

String

なし

:ssl_cert_object

MongoDB サーバーに対してアプリケーションを識別するために使用される OpenSSL::X509::Certificate 。 このオプションを介して渡すことができる証明書は 1 つだけです。

OpenSSL::X509::Certificate

なし

:ssl_cert_string

MongoDB サーバーに対してアプリケーションを識別するために使用される PEM でエンコードされた証明書を含む string。 string には証明書の秘密キーが含まれる場合もあります。その場合、秘密キーはこのオプションによって無視されます。 string には、クライアント証明書から CA 証明書への証明書チェーンを構成する中間証明書も含まれる場合があります。中間証明書はドライバーによって解析され、 extra_chain_cert属性の OpenSSL コンテキストに提供されます。 中間証明書が提供される場合は、クライアント証明書に従う必要があります。クライアント証明書は、string の最初の証明書でなければなりません。

このオプションは、存在する場合、 :ssl_cert_objectオプションよりも優先されます。

String

なし

:ssl_key

MongoDB に対する接続を識別するために使用される秘密キーファイル。 キーが証明書と同じファイルに保存されている場合でも、両方を明示的に指定する必要があることに注意してください。 このオプションが存在する場合、:ssl_key_string および :ssl_key_object の値よりも優先されます。

String

なし

:ssl_key_object

MongoDB に対する接続を識別するために使用される秘密キー。

OpenSSL::PKey

なし

:ssl_key_pass_phrase

秘密キーのパスフレーズ。

String

なし

:ssl_key_string

MongoDB に対する接続を識別するために使用される PEM でエンコードされた秘密キーを含む string 。 このパラメーターが存在する場合、オプションの値である :ssl_key_object よりも優先されます。

String

なし

:ssl_verify

ピア証明書、ホスト名、OCSP エンドポイントの検証を実行するかどうか。 :ssl_verify_certificateが設定されている場合は、証明書を検証するかどうかの決定が上書きされ、 :ssl_verify_hostnameが設定されている場合はホスト名を検証するかどうかの決定が上書きされ、OCSP エンドポイントを検証するかどうかの決定は、 :ssl_verify_ocsp_endpointが上書きされる場合、上書きされることに注意してください。 が設定されています。

Boolean

true

:ssl_verify_certificate

ピア証明書の検証を実行するかどうか。 この設定は、証明書の検証が実行されるかどうかに関して:ssl_verify設定を上書きします。

Boolean

true

:ssl_verify_hostname

ピア ホスト名の検証を実行するかどうか。 この設定は、ホスト名の検証が実行されるかどうかに関する:ssl_verify設定を上書きします。

Boolean

true

:ssl_verify_ocsp_endpoint

証明書で OCSP エンドポイントが指定されている場合、証明書で指定された OCSP エンドポイントに対してサーバーが提供した証明書を検証するかどうか。 この設定は、OCSP エンドポイント検証が実行されるかどうかに関して :ssl_verify を上書きします。

Boolean

true

:truncate_logs

ログをデフォルトで 250 文字で切り捨てるかどうか。

Boolean

true

:user

認証するユーザーの名前。

String

なし

:wait_queue_timeout

接続プール内の接続が利用可能になるまで待機する秒数。

Float

10

:wrapping_libraries

ドライバーをラップしている ODM などのライブラリに関する情報。 最初に低レベルのライブラリを指定します。 許可されたハッシュキー: :name、:version、:プラットフォーム。 例: [name: 'Mongoid', version: '7.1.2']

Array<Hash>

なし

:write

非推奨。 :write_concernオプションと同等。 :write:write_concernの両方が指定されている場合、それらの値は同一である必要があります。

Hash

{ w: 1 }

:write_concern

書込み保証(write concern) オプションをHashとして指定します。 ハッシュ内のキーは、 :w:wtimeout:j:fsyncです。 :wtimeoutは 秒ではなくミリ秒単位で指定されていることに注意してください。

{ write_concern: { w: 2 } }

Hash

{ w: 1 }

:zlib_compression_level

圧縮を使用する場合、使用するzlib圧縮レベル。 有効なレベルについては、 Rubyのzlibモジュールを参照してください。

Integer

なし

注意

Ruby ドライバーには、証明書失効リスト(CRL)チェックは実装されていません。

URI オプションは Ruby の標準ではない キャメル ケース である必要があるため、次の表は URI オプションとそれに対応する Ruby オプションを示しています。

URI オプションについて詳しくは、「接続 URI リファレンス 」を参照してください。

注意

URI でミリ秒単位で設定されているオプションは、Ruby ではfloatとして表され、単位はです。

URI オプション
Ruby オプション

appName= string

:app_name => String

authMechanism= string

:auth_mech => Symbol

認証メカニズム値は、URI オプションから Ruby オプションに次のように変換されます。

  • GSSAPI => :gssapi

  • MONGODB-CR => :mongodb_cr

  • MONGODB-X509 => :mongodb_x509

  • PLAIN => :plain

  • SCRAM-SHA-1 => :scram

  • SCRAM-SHA-256 => :scram256

認証メカニズムに別の値が指定されている場合は、変更されずに Ruby オプションに変換され、そのStringタイプが保持されます。 現在ドライバーでは認識されていない認証メカニズムでClient インスタンスを構築できますが、この動作 はドライバーの将来のバージョンで変更される可能性があります

authMechanismProperties=Strings

{ :auth_mech_properties => { :service_realm => String, :canonicalize_host_name => true|false, :service_name => String } }

カンマで区切られたキーと値のペアとして指定されます。例: "SERVICE_REALM:foo,CANONICALIZE_HOST_NAME:TRUE"

authSource= string

:auth_source => String

compressors=Strings

:compressors => Array<String>

使用する潜在的なコンプレッサーのコンマ区切りリスト(優先順位順)。 ドライバーが圧縮を実装する方法の詳細については、以下を参照してください。

connect= string

:connect => Symbol

ここでは、 :connect Ruby オプションが受け入れる値と同じ値が受け入れられます。 複数単語の値の場合、単語を区切るためにアンダースコアを使用して値を提供する必要があります(例connect=replica_setconnect=load_balanced

connectTimeoutMS=Integer

:connect_timeout => Float

Rubyな値(例: 負の値および数値以外の値)の場合、この URI オプションによって指定された無効な値は警告付きで無視されます。

directConnection=ブール値

:direct_connection => Boolean

fsync=ブール値

{ :write_concern => { :fsync => true|false }}

heartbeatFrequencyMS=Integer

:heartbeat_frequency => Float

journal=ブール値

{ :write_concern => { :j => true|false }}

loadBalanced=ブール値

:load_balanced => Boolean

localThresholdMS=Integer

:local_threshold => Float

maxConnecting=Integer

:max_connecting => Integer

maxIdleTimeMS=Integer

:max_idle_time => Float

maxStalenessSeconds=Integer

{ :read => { :max_staleness => Integer }}

maxStalenessSeconds URI オプションの値が -1 の場合、 オプションがまったく指定されていない限り、ドライバーはこれを として扱います。 それ以外の場合、オプション値が数値の場合、Ruby オプションはIntegerに変換された指定された値に設定されます。 0 より大きく 90 未満、または -1 より小さい数値はwith Clientコンストラクターによって受け入れられますが、サーバー選択は失敗します(たとえば、ドライバー上で実行されているすべての操作に適用されます。 オプション値が数値以外の場合は無視され、ドライバーはこの場合、オプションがまったく指定されていないかのように扱われます。

maxPoolSize=Integer

:max_pool_size => Integer

minPoolSize=Integer

:min_pool_size => Integer

readConcernLevel= string

:read_concern => Hash

readPreference= string

{ :read => { :mode => Symbol }}

readPreferenceTags=Strings

{ :read => { :tag_sets => Array<Hash> }}

readPreferenceTags フィールドの各インスタンスは、カンマで区切られたキーと値のペアであり、指定された順序で : tags_sets 配列に表示されます。 たとえば、 "readPreferenceTags=dc:ny,rack:1&readPreferenceTags=dc:ny"[ { 'dc' => 'ny', 'rack' => '1' }, { 'dc' => 'ny' }]に変換されます。

レプリカセット= string

:replica_set => String

retryWrites=ブール値

:retry_writes => boolean

serverSelectionTimeoutMS=Integer

:server_selection_timeout => Float

socketTimeoutMS=Integer

:socket_timeout => Float

Rubyな値(例: 負の値および数値以外の値)の場合、この URI オプションによって指定された無効な値は警告付きで無視されます。

srvMaxHosts=Integer

:srv_max_hosts => Integer

srvServiceName= string

:srv_service_name => String

ssl=ブール値

:ssl => true|false

tls=ブール値

:ssl => boolean

tlsAllowInvalidCertificates=Bool

:ssl_verify_certificate => boolean

tlsAllowInvalidCertificatestrueを使用して検証を無効にすることを指定し、 ssl_verify_certificatefalseを使用して検証を無効にすることを指定するため、ブール値はssl_verify_certificateを設定するために使用される前に反転されます。

tlsAllowInvalidHostnames=Bool

:ssl_verify_hostname => boolean

tlsAllowInvalidHostnamestrueを使用して検証を無効にすることを指定し、 ssl_verify_hostnamefalseを使用して検証を無効にすることを指定するため、ブール値はssl_verify_hostnameを設定するために使用される前に反転されます。

tlsCAFile= string

:ssl_ca_cert => String

tlsCertificateKeyFile= string

:ssl_cert => String

tlsCertificateKeyFile= string

:ssl_key => String

tlsCertificateKeyFilePassword= string

:ssl_key_pass_phrase => String

tlsDisableOCSPEndpointCheck=Bool

:ssl_verify_ocsp_endpoint => boolean

tlsDisableOCSPEndpointChecktrueを使用して検証を無効にすることを指定し、 ssl_verify_ocsp_endpointfalseを使用して検証を無効にすることを指定するため、ブール値はssl_verify_ocsp_endpointを設定するために使用される前に反転されます。

tlsInsecure=ブール値

:ssl_verify => boolean

tlsInsecure はtrueを使用して検証を無効にすることを指定し、 ssl_verifyfalseを使用して検証を無効にすることを指定するため、ブール値はssl_verifyを設定するために使用される前に反転されます。

w=Integer|String

{ :write_concern => { :w => Integer|String }}

waitQueueTimeoutMS=Integer

:wait_queue_timeout => Float

wtimeoutMS=Integer

{ :write_concern => { :wtimeout => Integer }}

zlibCompressionLevel=Integer

:zlib_compression_level => Integer

注意

Ruby ドライバーは、サーバーの証明書が失効したことを示す明確な署名付き応答を受信した場合にのみ接続を失敗します。 このため、ドライバーはtlsDisableCertificateRevocationCheck URI オプションを認識しません。 このオプションが URI で指定されている場合、無視されます。

操作を実行するときに、ドライバーが操作を送信するのに適したサーバーを見つけるまで待機する秒数。 デフォルトは 30 です。

値が 0 の場合、タイムアウトは発生しません。

無効な値(負の値や数値以外の値)が URI オプションを介して渡される場合、無効な入力は警告付きで無視されます。 Ruby オプションを介して無効な値がクライアントに直接渡されると、クライアントの構築はエラーで失敗します。

レプリカセットの配置では、ドライバーがプライマリの変更を透過的に処理できるように、このタイムアウトを通常のレプリカセットの選挙時間を超えるように設定する必要があります。 このタイムアウトでは、アプリケーションとデータベースを同時に起動することもできます。アプリケーションは、データベースが使用可能になるまで最大でこの時間待機します。

アプリケーション サーバーがリバースプロキシの背後にある場合、サーバー選択タイムアウトはリバースプロキシに設定されているリクエストタイムアウトよりも小さくする必要があります(たとえば、ルーティング層のタイムアウトが 30 秒に固定されている Helku での配置に適用されます)。 開発環境では、サーバーが実行されていない場合に、この値を低くして障害をより早く解決できます。

通常の(非モニタリング)接続でソケットの読み取りまたは書き込みが完了するまで待機する秒数。 デフォルトでは、タイムアウトはありません。

値が 0 の場合、タイムアウトは発生しません。

無効な値(負の値や数値以外の値)が URI オプションを介して渡される場合、無効な入力は警告付きで無視されます。 Ruby オプションを介して無効な値がクライアントに直接渡されると、クライアントの構築はエラーで失敗します。

このタイムアウトは、ネットワーク レイテンシと操作期間の両方を考慮する必要があります。 たとえば、このタイムアウトを 5 秒に設定すると、 Mongo::Error::SocketTimeoutErrorがサーバー上で実行されるのに 5 秒以上かかるクエリは中止されます。

デフォルトではソケット タイムアウトは設定されていませんが、オペレーティング システムの構成によっては、読み取り操作がタイムアウトする可能性があることに注意してください。 キープアライブ設定は、切断されたネットワーク接続を検出することを目的としています(実行に時間がかかるため操作を中止するものではありません)。

socket_timeoutの値を超えてドライバーによって操作がタイムアウトされた場合でも、サーバー上で操作は中止されないことに注意してください。 このため、サーバー上での実行が中止される可能性がある操作にはmax_time_msオプションを使用することをお勧めします。

このオプションは、接続のモニタリングには適用されません。

サーバーへのソケット接続が確立されるまでの待機時間(秒単位)。 デフォルトは 10。

このタイムアウトは、接続を監視するための接続タイムアウトとソケット タイムアウトの両方にも使用されます。

mongodb+srv:// URI を使用する場合、このタイムアウトは SRV と TXT の DNS ルックアップにも使用されます。 タイムアウトは検索ごとに適用されることに注意してください。 DNS サフィックス検索リストにより、1 つの名前解決の一部として複数の検索が実行される場合があります。

接続プール内の接続が利用可能になるまで待機する秒数。 デフォルトは 10。

ドライバー バージョン 2.11 以降では、接続プールが接続を返す前に完全に接続を確立するようになりました。これには複数のネットワーク ラウンド トリップが必要になる場合があるため、このタイムアウトは少なくともconnect_timeoutより大きい値に設定する必要があります。

特定の操作のオプションとして指定された、サーバー上での操作の実行を許可するミリ秒数です。 デフォルトでは設定されていません。

長時間実行されすぎる操作に時間がかかりすぎる場合、サーバー上で長時間実行されている操作が中断される可能性がある場合は、 socket_timeoutの代わりにこのオプションを使用することを検討してください。

書込み保証 (write concern) で指定されたサーバー数によって書込み (write) が確認されるまで待機するミリ秒数。 デフォルトで設定されていない場合、サーバーはデフォルトを適用するように指示します。 このオプションは、クライアントでグローバルに設定することも、 :write_concernの下の個々の操作に渡すこともできます。

TLS を使用して MongoDB 配置に接続するには、次のようにします。

  • Mongo::Clientで TLS 接続を有効にします。

  • クライアント TLS 証明書を指定します。

  • サーバーの TLS 証明書を検証するために CA 証明書を指定します。

注意

JRuby を使用する場合、ECDSA 証明書は現在サポートされていません。

Ruby ドライバーでサポートされているすべての MongoDB サーバー バージョン(2.6 以上)は、TLS のみを実装します。 2.6 以降のサーバーでは SSL は使用されません。

履歴上の理由により、TLS 構成に関連する Ruby オプション名では、 tlsプレフィックスではなくsslが使用されます。 Ruby ドライバーの次のメジャー バージョン(3.0)では、Ruby オプション名にtlsプレフィックスが使用されます。

URI オプション名にはtlsプレフィックスが使用されます。ただし、非推奨でtls URI オプションと同等のssl URI オプションがあります。

配置で TLS 接続が必要な場合は、クライアント側で TLS を明示的に要求する必要があります。現在、配置に TLS が必要かどうかの自動検出はありません。

TLS 接続をリクエストするには、 Mongo::Clientを構築するときに次のクライアント オプションを指定します。

  • :ssl Ruby オプション。

  • tls URI オプション。

  • ssl URI オプション(非推奨)。

デフォルトでは、MongoDB サーバーは接続クライアントの TLS 証明書の検証を試行します。そのため、クライアントは接続時に TLS 証明書を指定する必要があります。 これは、次の方法で実行できます。

  • :ssl_cert / :ssl_cert_object / :ssl_cert_stringおよび:ssl_key / :ssl_key_object / :ssl_key_string / :ssl_key_pass_phrase Ruby オプション。

  • tlsCertificateKeyFile URI オプション。

Ruby オプションを使用する場合、クライアント TLS 証明書と対応する秘密キーが個別に提供される場合があります。 たとえば、証明書がclient.crtに保存され、秘密キーがclient.keyに保存されている場合、 Mongo::Clientは次のように構築できます。

client = Mongo::Client.new(["localhost:27017"],
ssl: true,
ssl_cert: 'path/to/client.crt',
ssl_key: 'path/to/client.key',
ssl_ca_cert: 'path/to/ca.crt',
)

ssl_certssl_cert_stringssl_keyssl_key_string Ruby オプションでは、証明書とキーをそれぞれ同じファイルまたは string で提供することもできます。 証明書と秘密キーの両方を含むファイルの拡張子は、頻繁に.pemになります。 証明書と秘密キーの両方が同じファイルまたはstringで提供されている場合は、次のように、証明書オプションとキー オプションの両方を使用する必要があります。

client = Mongo::Client.new(["localhost:27017"],
ssl: true,
ssl_cert: 'path/to/client.pem',
ssl_key: 'path/to/client.pem',
ssl_ca_cert: 'path/to/ca.crt',
)

URI オプションを使用する場合は、証明書とキーを ファイルに保存し、両方を同じファイルに保存する必要があります。 使用例:

client = Mongo::Client.new(
"mongodb://localhost:27017/?tls=true&tlsCertificateKeyFile=path%2fto%2fclient.pem&tlsCertificateKeyFile=path%2fto%2fca.crt")

注意

URI オプション値は適切に URI エスケープされる必要があります。 これは、パス内のスラッシュに適用されます。

特定の暗号を有効または無効にするなど、ドライバーで TLS オプションをさらに構成することが必要な場合があります。 現在のところ、Ruby ドライバーはMongo::Clientを初期化するときにこれを行う方法を提供していません。

ただし、Ruby ドライバーはグローバルな「TLS コンテキスト フック」を設定する方法を提供します。これらは ソケットで使用されるユーザー提供のProc``s that will be invoked before any TLS socket connection and can be used to modify the underlying ``OpenSSL::SSL::SSLContextオブジェクトです。

TLS コンテキスト フックを設定するには、 Proc``s to the ``Mongo.tls_context_hooks配列を追加します。 これは、Mongo::Client インスタンスを作成する前に行う必要があります。 たとえば、Rails アプリケーションでは、このコードは 初期化子に配置できます。

Mongo.tls_context_hooks.push(
Proc.new { |context|
context.ciphers = ["AES256-SHA"]
}
)
# Only the AES256-SHA cipher will be enabled from this point forward

Proc内のすべてのMongo.tls_context_hooks OpenSSL::SSL::SSLContextには、単一の引数として オブジェクトが渡されます。これらのProc``s will be executed sequentially during the creation of every ``Mongo::Socket::SSLオブジェクトは。

Mongo.tls_context_hooks=を呼び出すフックの配列全体を割り当てることも可能ですが、そうすると、以前に割り当てられたフックがすべて削除されます。 Array#pushArray#unshift新しいフックを追加するには、 メソッドまたは メソッドを使用することをお勧めします。

Proc への参照をアプリケーション内の別の場所に保存し、 Array#delete_ifを使用して必要なフックを削除することで、 Mongo.tls_context_hooksからフックを削除することもできます。

警告

TLS コンテキスト フックはグローバルであり、 Mongo::Clientのすべてのインスタンスに影響します。 アプリケーションでこれらのフックを有効にできるライブラリは、ライブラリがロードされたときにフックを自動的に有効にするのではなく、フック(アプリケーションによって呼び出される)を変更するためのメソッドを公開する必要があります。

TLS 用の MongoDB サーバーの構成の詳細については、 MongoDB マニュアルを参照してください。

クライアント証明書とサーバー証明書の両方で証明書チェーンを使用できます。 チェーンを使用する場合は、証明機関パラメータには信頼できるルート証明書のみを含めるように設定する必要があります。中間証明書(存在する場合)は、それぞれリーフサーバーとクライアント証明書の後に連結して、サーバーまたはクライアント証明書で提供する必要があります。

:ssl_cert:ssl_cert_string Ruby オプション、およびtlsCertificateKeyFile URI オプションは、証明書チェーンをサポートします。 のインスタンスを受け取る:ssl_cert_object Ruby オプションは、証明書チェーンをサポートしていません。OpenSSL::X509::Certificate

Ruby ドライバーは厳格な X.509 証明書検証を実行します。これには、中間証明書に次のフィールドが 両方 設定されている必要があります。

  • X509v3 基本制約: CA: true -- 証明書に署名可能

  • X509v3 キー使用: キー証明書署名 -- 証明書に署名できます

これらのフラグについて詳しくは 、この Stack Overflow の質問 を 参照してください。 。

tlsCAFile / ssl_ca_certオプションで渡されるルート CA 証明書に中間証明書を連結することはよくあります。 これにより、中間証明書は信頼できるステータスに引き上げられ、実際の CA ルートに対して検証されなくなります。 この問題の詳細については 、このフィーリング リストの記事を 参照してください。 。

ドライバーはデフォルトでサーバーの TLS 証明書の検証を試み、この検証が失敗した場合は接続を中止します。 デフォルトでは、ドライバーはデフォルトのシステム ルート証明書ストアを信頼アンカーとして使用します。 サーバーの証明書に署名されている CA 証明書を指定するには、次を使用します。

  • :ssl_ca_cert / :ssl_ca_cert_string / :ssl_ca_cert_object Ruby オプション

  • tlsCAFile URI オプション。

これらのオプションのいずれかを指定すると、サーバーの証明書は指定された CA 証明書に対してのみ検証され、デフォルトのシステム ルート証明書ストアは使用されません。

サーバー TLS 証明書検証を実行しない(推奨はされません)には、 ssl_verify: false Ruby オプションまたはtlsInsecure=true URI オプションを指定します。

:ssl_ca_cert Ruby オプションとtlsCAFile URI オプションは、複数の証明書を含むファイルで使用できます。 このように参照されるすべての証明書は、トラスト アンカーになります。

:ssl_ca_cert_objectオプションは証明書の配列を指定するため、証明機関として複数の証明書を追加する目的でも使用できます。

:ssl_ca_cert_stringオプションでは CA 証明書の指定が 1 つだけの指定がサポートされています。

警告

CA 証明書オプションで指定されたファイルには中間証明書を含めることはできません。 そうすると、中間証明書がルート証明書に対して検証されるのではなく、中間証明書がルート証明書のステータスに昇格します。

中間証明書を使用する必要がある場合は、クライアントまたはサーバーの TLS 証明書ファイルの一部として指定します。

サーバーによって提供された証明書に OCSP エンドポイント URI が含まれている場合、ドライバーは指定されたエンドポイントに OCSP リクエストを発行して、証明書の有効性を確認します。

OCSP エンドポイント チェックを無効にするには、クライアントの作成時に:ssl_verify_ocsp_endpoint Ruby オプションをfalseに設定するか、 tlsDisableOCSPEndpointCheck URI オプションをtrueに設定します。

注意

OCSP エンドポイント チェックは現在、JRuby で実行している場合は実行されません。JRuby は OCSP エンドポイント URI を正しく公開しないためです。

ホスト名としてlocalhostを使用してクライアントを構築すると、IPv4 接続のみが試行されます(つまり、 localhost127.0.0.1::1に解決される場合、ドライバーは127.0.0.1への接続のみを試行します)。

localhost以外のホスト名でクライアントを構築すると、ホスト名が解決するアドレスに応じて IPv4 接続と IPv6 接続の両方が試行されます。 ドライバーは、 getaddrinfoがアドレスを返す順序を尊重し、それらから順番に接続を試みます。 最初に成功した接続が使用されます。

ドライバーは現在、Playgrounds アルゴリズムを実装していません。

システム構成と Ruby 言語ランタイムで許可されている場合、ドライバーは TCP キープアライブを有効にし、以下にリストされている各キープアライブ パラメーターごとに、それぞれのパラメーターの値を指定された値に設定します。リストされたドライバー値:

  • tcp_keepalive_time: 120 秒

  • tcp_keepalive_intvl: 10秒

  • tcp_keepalive_cnt: 9 probes

注意

JRuby 9.2.14.0 以降、 JRuby は、キープアライブ パラメーターを設定するために必要な API を実装していません。 JRuby を使用する場合、ドライバーはキープアライブ パラメーターを設定できず、システム構成が有効になります。

より低い値を使用したり、必要な API を公開していない JRuby などの環境でパラメーターを変更したりするには、 MongoDB 診断 FAQ のキープアライブ セクション で説明されているように、システム レベルでパラメーターを調整してください。 。

Mongo::Client instances have a connection pool per server that the client is connected to. プールは、アプリケーションによって発行された同時 MongoDB 操作をサポートするためのオンデマンド接続を作成します。 接続にはスレッドアフィニティはありません。

クライアント インスタンスは、サーバーの状態を監視するために、既知のサーバーごとに 1 つの追加の接続を開きます。

各接続プールのサイズはmax_pool_sizeに制限されており、デフォルトは 5 です。アプリケーション内のスレッドが MongoDB で操作を開始すると、プールからその操作を送信する接続を検索しようとします。 プールに利用可能な接続がある場合は、プールから接続をチェックアウトし、その接続を操作に使用します。 使用可能な接続がなく、プールのサイズがmax_pool_sizeより小さい場合は、新しい接続が作成されます。 すべての接続が使用され、プールが最大サイズに達した場合、スレッドは別のスレッドによってプールに接続が返されるまで待機します。 max_pool_sizeが 0 に設定されている場合、プール内の最大接続数の制限はありません。

各プールには、サーバーに同時に接続できる接続数の制限があります。 この制限はmax_connectingと呼ばれ、デフォルトは 2 です。現在サーバーに接続している接続数がこの制限に達した場合、プールは接続試行が成功するか失敗するのを待ってから、新しい接続の作成を試みます。 アプリケーションに多数のスレッドがある場合は、接続が確立されるまでスレッドが待機しないように、 max_connectingを増やしてください。

接続可能になるまでスレッドが待機する秒数は構成可能です。 この設定はwait_queue_timeoutと呼ばれ、秒単位で定義されます。 このタイムアウトに達すると、 Timeout::Errorが発生します。 デフォルトは 1 秒です。

ドライバー バージョン 2.11 以降、ドライバーはmin_pool_size設定までの接続を早期に作成します。 ドライバー バージョン 2.11 より前では、ドライバーは常にオンデマンドで接続を作成していました。 すべてのバージョンのドライバーで、接続が確立されると、プール サイズがmin_pool_sizeを超えない限り、ドライバーによってプールに保持されます。

ただし、 min_pool_sizeが 0 より大きい値に設定されている場合、アプリケーションがセカンダリ読み取りを実行していなくても、ドライバーはレプリカセットの配置でセカンダリへのその数の接続を確立します。 これらの接続の目的は、プライマリが変更した場合のフェイルオーバーを高速化することです。

マルチスレッド アプリケーションが開始する接続数を推定する例があります。3 ノードのレプリカセットに接続されたクライアントは、3 つの監視ソケットを開きます。 また、各サーバー上でのマルチスレッド アプリケーションの同時操作をサポートするために必要な数のソケットを開きます(最大max_pool_size 。 アプリケーションがプライマリ(デフォルト)のみを使用する場合は、プライマリ接続プールのみが大きくなり、合計接続数は最大 8(プライマリ プールの 5 接続 + 3 モニタリング接続)になります。 アプリケーションが 読み込み設定 (read preference) を使用してセカンダリをクエリすると、それらのプールも大きくなり、合計接続数は 18(5 + 5 + 5 + 3)に達します。

Mongo::Clientのデフォルト構成はほとんどのアプリケーションで動作します。

client = Mongo::Client.new(["localhost:27017"])

このクライアントはプロセスごとに1 回作成し、すべての操作で再利用します。 リクエストごとに新しいクライアントを作成することがよくあります。これは非常に非効率的であり、クライアントがそのために設計されたものではありません。

1 つのプロセス内で非常に多くの同時 MongoDB 操作をサポートするには、 max_pool_sizeを増やします。

client = Mongo::Client.new(["localhost:27017"], max_pool_size: 200)

1 つのプロセス内で同じクライアントを共有する極端に多くのスレッドをサポートするには、 max_connectingを増やします。

client = Mongo::Client.new(["localhost:27017"], max_pool_size: 200, max_connecting: 10)

接続が利用可能になるまで待機する任意の数のスレッドが、デフォルトの(1 秒)またはwait_queue_timeout設定で待機できます。

client = Mongo::Client.new(["localhost:27017"], wait_queue_timeout: 0.5)

いずれかのスレッドによってクライアント上で#closeが呼び出されると、すべての接続が閉じられます。

client.close

上記のブロック構文を使用してクライアントを作成すると、ブロックの実行が完了した後にクライアントは自動的に閉じられることに注意してください。

注意

Mongoid を使用するアプリケーションは、 Mongoid の 「フォークサーバーでの使用」 ドキュメントに従う必要があります。 以下のガイダンスは、Ruby ドライバーを直接使用するアプリケーションに提供されています。

Pume などのフォーク Web サーバーを使用して Web アプリケーションでmongo Rubyドライバーを使用する場合、またはアプリケーションがフォークする場合、各プロセス(親と子)には独自のクライアント接続が必要です。 その理由は以下のとおりです。

  1. Ruby MongoDB ドライバーによって接続状態を監視するために使用されるバックグラウンド Ruby スレッドは、子プロセスに転送されません

  2. ネットワーク ソケットのようなファイル記述子親プロセスと子プロセス間で共有されるため、I/O 競合が発生する可能性があります。

( 1 )について、フォーク後に子プロセスでドライバーの監視スレッドを再起動しないと、子は最初は正しく機能しているように見えても、MongoDB クラスターの状態が変化した場合には、最終的にはMongo::Error::NoServerAvailableの例外が発生します。たとえば、ネットワーク エラーやメンテナンス イベントが原因で発生します。

( 2 )に関して、子プロセスが親のファイル記述子を再利用すると、 Errno::EPIPE: Broken pipeEOFError: end of file reachedなどのメッセージを含むMongo::Error::SocketErrorエラーが表示されます。

Ruby ドライバーをウェブ アプリケーションで使用する場合は、可能であれば、親プロセス(ワーカーがフォークされる前)にMongo::Clientインスタンスを作成せず、代わりにワーカーにクライアント インスタンスのみを作成することをお勧めします。

特定の高度なユースケース( Pume の fork_worker オプション など) では、親プロセスと子プロセスの両方でMongo::Client インスタンスが開かれている必要があります。この場合は、クライアントの再接続を手動で処理する必要があります。

それには、親プロセス上の既存のクライアント接続を閉じます。 これにより、子が親のファイル記述子を再利用することによって、親プロセスでネットワーク エラーとモニタリング エラーが発生するのを防ぎます。

# Immediately before fork
client.close

注意

Client#closeを呼び出しても、現在実行中のデータベース操作は中断されません。 新しい操作を実行すると、クライアントは自動的に再接続されます。

次に、フォークの直後に、新しくフォークされた子プロセスでクライアントを再接続します。これにより、ドライバーの監視スレッドが再起動します。

# Immediately after fork
client.reconnect

ほとんどのウェブ サーバーは、ワーカー プロセスがフォークされたときにアプリケーションがアクションを実行するために使用できるフックを提供しています。 推奨されるフックは次のとおりです。

  • Pume before_forkon_reforkの場合 では、on_worker_boot と を使用して親プロセス内のクライアントを閉じ、 を使用して子プロセス内の再接続を行います。

  • Unicode before_forkの場合 、親プロセス内のクライアントを閉じるにはafter_fork を、子プロセス内のクライアントを再接続するには を使用します。

  • 乗用者 子プロセス内のクライアントを再接続するための 、 (Pager には事前フォークがあるようには表示されません)。starting_worker_process

その他の例については、 Mongoid の「フォーク サーバーでの使用」ドキュメントを参照してください。

クライアントのsummaryメソッドは、クライアントが監視しているサーバーとその状態を含むクライアントの現在の状態を返します。 いずれかのサーバーが監視されていない場合は、 NO-MONITORINGフラグで示されます。

通常に動作しているクライアントでは、次のようなサマリーが生成されます。

client.summary
=> "#<Client cluster=#<Cluster
topology=ReplicaSetWithPrimary[localhost:14420,localhost:14421,localhost:14422,localhost:14423,name=ruby-driver-rs,v=1,e=7fffffff000000000000001f]
servers=[#<Server address=localhost:14420 PRIMARY replica_set=ruby-driver-rs pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14421 SECONDARY replica_set=ruby-driver-rs pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14422 SECONDARY replica_set=ruby-driver-rs pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14423 ARBITER replica_set=ruby-driver-rs>]>>"

バックグラウンド スレッドがないクライアントでは、次のような概要が生成されます。

client.summary
=> "#<Client cluster=#<Cluster
topology=ReplicaSetWithPrimary[localhost:14420,localhost:14421,localhost:14422,localhost:14423,name=ruby-driver-rs,v=1,e=7fffffff000000000000001f]
servers=[#<Server address=localhost:14420 PRIMARY replica_set=ruby-driver-rs NO-MONITORING pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14421 SECONDARY replica_set=ruby-driver-rs NO-MONITORING pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14422 SECONDARY replica_set=ruby-driver-rs NO-MONITORING pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14423 ARBITER replica_set=ruby-driver-rs>]>>"

ドライバーは、読み取りを再試行するための 2 つのメカニズム(モダンとレガシー)を実装しています。 ドライバー バージョン 2.9.0 以降では、最新のメカニズムがデフォルトで使用され、レガシー メカニズムは非推奨です。

最新のメカニズムを使用すると、ネットワークエラー、「mongos マスター」エラー、または「node がリカバリ中」エラーが発生した場合、読み取り操作は 1 回再試行されます。 次の操作がカバーされます。

操作によってカーソルが返された場合、再試行できるのは最初の読み取りコマンドのみです。 カーソルに対するgetMore操作は、ドライバー バージョン 2.9.0 以降では再試行されません。 さらに、読み取り操作が再試行されると、操作用の新しいサーバーが選択されます。これにより、最初の読み取りを受信したサーバーとは異なるサーバーに再試行が送信される可能性があります。

最新の再試行可能な読み取りの動作は、 再試行可能な読み取りの仕様 で詳細にカバーされています

最新の再試行可能な読み取りは、MongoDB 3.6 以降のサーバーでのみ使用できることに注意してください。 MongoDB 3.4 以前のサーバーで使用する場合、Ruby ドライバー バージョン 2.9.0 以降では、デフォルトで読み取りを再試行しません。アプリケーションは、 retry_reads: falseクライアント オプションを設定するか、 retryReads=false URI オプションを使用して、レガシー再試行可能な読み取りを明示的にリクエストする必要があります。

Ruby ドライバーのレガシー読み取り再試行動作は、 retry_reads: falseクライアント オプションを設定するか、クライアントにretryReads=false URI オプションを渡すことで利用できます。

レガシー読み取り再試行動作を使用する場合、 max_read_retriesクライアント オプションを指定することで再試行回数を設定できます。 ドライバー バージョン 2.9.0 以降を使用する場合、レガシーの再試行可能な読み取りで再試行される操作のセットは、最新の再試行可能な読み取りの上記で説明した操作と同じになります。 古いバージョンのドライバーでは、一部の操作が再試行されなかったため、レガシー再試行可能な書き込みの動作が異なりました。

ドライバー バージョン 2.9.0 以降、レガシー読み取り再試行では、最新の再試行可能な書込みと同様に、操作の再試行前にサーバー選択が実行されます。 古いバージョンのドライバーでは、読み取りの再試行は最初の読み取りが送信されたサーバーと同じサーバーに送信されていました。

すべての読み取り再試行を無効にするには、次のクライアント オプションを設定します: retry_reads: false, max_read_retries: 0

ドライバーは書込みを再試行するための 2 つのメカニズム(モダンとレガシー)を実装しています。 ドライバー バージョン 2.9.0 以降、最新のメカニズムは、それをサポートするサーバーでデフォルトで使用され、レガシー メカニズムは非推奨となり、すべてのサーバー バージョンでデフォルトで無効になります。

コレクションに対する日次の操作で使用される次の書き込みメソッドは、書込み再試行の対象となります。

  • collection#insert_one

  • collection#update_one

  • collection#delete_one

  • collection#replace_one

  • collection#find_one_and_update

  • collection#find_one_and_replace

  • collection#find_one_and_delete

  • collection#bulk_write (すべての単一ステートメント操作の場合、 update_manyまたはdelete_manyの場合ではありません)

最新のメカニズムでは、ドライバーが MongoDB 3.6 以降のレプリカセットまたはシャーディングされたクラスターに接続されていると、サーバーで oplog が必要なため、失敗した書き込みを 1 回再試行します。 モダン メカニズムでは、ドライバーがスタンドアロンの MongoDB サーバーまたはサーバー バージョン 3.4 以前に接続されている場合、書き込みを再試行しません。

次のエラーにより、書込みが再試行されます。

  • タイムアウトなどのネットワーク エラー

  • "not Master" エラー

  • 「ノードはリカバリ中」エラー

書き込みを再試行する前に、ドライバーはサーバー選択を実行します。これは、最初の書き込みが送信されたサーバーが使用できなくなっている可能性があるためです。

クライアント オプションretry_writes: falseを設定するか、 retryWrites=false URI オプションを使用して、最新の再試行可能な書込みメカニズムが無効になっている場合、ドライバーはレガシーの再試行可能な書込みメカニズムを利用します。 レガシー メカニズムは、最新のメカニズムと同じ操作に対して書込みを再試行します。 デフォルトでは、レガシーメカニズムは最新のメカニズムと同様に 1 回再試行します。再試行回数を変更するには、 :max_write_retriesクライアント オプションを設定します。

レガシーと最新の再試行メカニズムの違いは、レガシー メカニズムでは最新のメカニズムとは異なるエラー セットの書込みを再試行することと、ネットワーク タイムアウトが発生した場合は書込みを再試行しないことです。

すべての書き込み再試行を無効にするには、次のクライアント オプションを設定します: retry_writes: false, max_write_retries: 0

デフォルトのグローバル ドライバー ロガーを使用することも、独自のグローバル ドライバー ロガーを設定することもできます。 自分の を設定するには、次の手順に従います。

Mongo::Logger.logger = other_logger

Ruby Logger のドキュメント を参照してください デフォルトのロガー API と利用可能なレベルの詳細については、 を参照してください。

ロガー レベルを変更するには:

Mongo::Logger.logger.level = Logger::WARN

より詳細な制御を行うには、ロガーをクライアントに渡して、ログの記録をクライアントごとに制御できます。

my_logger = Logger.new(STDOUT)
Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test', :logger => my_logger )

デフォルトのログでは、ログはデフォルトで 250 文字で切り捨てられます。 これをオフにするには、クライアント インスタンスに オプションを渡します。

Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test', :truncate_logs => false )

ワイヤプロトコル圧縮を使用するには、 :compressors Ruby オプションまたはcompressors URI オプションのいずれかを使用して少なくとも 1 つのコンプレッサーを明示的にリクエストする必要があります。 コンプレッサーが明示的に要求されていない場合、1 つ以上のコンプレッサーに必要な依存関係がシステム上に存在しても、ドライバーは圧縮を使用しません。

ドライバーは、サーバーによってサポートされているコンプレッサーのうち、最初のコンプレッサーを選択します。 ドライバーは現在、 zstdsnappyzlibのコンプレッサーをサポートしています。 zstdコンプレッサーは、他のコンプレッサーと比較して同じ CPU 消費で最も高い圧縮を生成するため推奨されます。 最大のサーバー互換性のために、3 つのコンプレッサーすべてを指定できます(たとえば、 compressors: ["zstd", "snappy", "zlib"]

zstd コンプレッサーには zstd-ruby が必要です インストールするライブラリ。snappyコンプレッサーには snappy が必要です インストールするライブラリ。zstdまたはsnappy圧縮が要求され、それぞれのライブラリを読み込まない場合、ドライバーはMongo::Clientの作成中にエラーを発生させます。 zlib圧縮には、 zlib標準ライブラリ拡張機能が存在する必要があります。

さまざまなコンプレッサーのサーバー サポートは次のとおりです。

  • zstd には が必要で、MongoDB 4.2 以降ではデフォルトで有効になっています。

  • snappy には MongoDB 3.4 以上が必要で、MongoDB 3.6 以上ではデフォルトで有効になっています。

  • zlib には MongoDB 3.6 以上が必要で、MongoDB 4.2 以降ではデフォルトで有効になっています。

MongoDB 5.0 以降では、アプリケーションはサーバーが特定のサーバー API バージョンに準拠しているように動作することをリクエストできます。

サーバー API パラメータは、 Clientへの:server_apiオプションを介して指定できます。 これらのパラメーターは URI 経由で提供できません。

現在定義されている API バージョンは"1"のみです。 次のようにリクエストできます。

client = Mongo::Client.new(['localhost'], server_api: {version: "1"})

MongoDB サーバーは API バージョンを string 値として定義します。 便宜上、API バージョンが整数として指定されている場合、Ruby ドライバーはそれを文字列化し、それを string としてサーバーに送信します。

client = Mongo::Client.new(['localhost'], server_api: {version: 1})

サーバーは、文字列化された整数ではない API バージョンを定義する場合があることに注意してください。 アプリケーションでは、すべての有効な API バージョンが整数として表現できることを前提としている必要はありません。

特定の API バージョンが要求されると、その API バージョンの操作は、その API バージョンで指定されたように動作します。 指定された API バージョンに含まれない操作は、API バージョンがまったく指定されていない場合と同様に動作します。 構成された API バージョンに動作が影響する操作は、コマンド引数、クエリ、集計パイプライン ステージと引数を含むコマンドです。

アプリケーションは、 :strictオプションを設定することで、指定された API バージョンに含まれないすべての操作をサーバーが拒否することをリクエストできます。

client = Mongo::Client.new(['localhost'], server_api: {version: "1", strict: true})

たとえば、 :tailableオプションはサーバー API バージョン 1 の一部ではないため、次のクエリは失敗します。

client = Mongo::Client.new(['localhost'], server_api: {version: "1", strict: true})
client['collection'].find({}, tailable: true)
# => Mongo::Error::OperationFailure (BSON field 'FindCommand.tailable' is not allowed with apiStrict:true. (323) (on localhost:27017, modern retry, attempt 1))

アプリケーションは、 :deprecation_errorsオプションを設定することで、指定された API バージョンで非推奨のすべての操作をサーバーが拒否することを要求できます。

client = Mongo::Client.new(['localhost'], server_api: {version: "1", deprecation_errors: true})

このドキュメントの作成時点で、API バージョン"1"に非推奨の操作はありません。

サーバー API パラメータがClientオブジェクトで定義されている場合、それらは[ 1 ]で実行された各操作の一部としてクライアントによって送信されます。

[1] getMore トランザクション内の コマンドと コマンドは API パラメーターを受け入れないため、ドライバーはこれらの場合、ドライバーはそれらを送信しません。

5.0 より前の MongoDB サーバーは API パラメーターを認識しないため、アプリケーションでそれらを構成する場合、さまざまなエラーが発生します。 Ruby ドライバーはすべての MongoDB 3.6 以降のサーバーに API パラメーターを送信しますが、API パラメーターは、アプリケーションが MongoDB 5.0 以降のサーバーと通信している場合にのみ構成する必要があります。 API パラメーターは、レガシー ワイヤプロトコルを使用する MongoDB 3.4 以前のサーバーに送信できません。アプリケーションが API パラメーターを構成し、MongoDB 3.4 以前のサーバーに接続する場合、ドライバーはすべての操作でエラーを生成します。

コマンド ヘルパーを使用すると、アプリケーションは手動で構築したコマンドをサーバーに送信できます。 クライアントがサーバー API パラメーターで構成されていない場合、コマンドヘルパーを使用して API パラメーター付きのコマンドを発行できます。

client.database.command(
ping: 1,
apiVersion: "1",
apiStrict: false,
apiDeprecationErrors: false,
)

クライアントがサーバー API パラメーターで構成されている場合、コマンドヘルパーはサーバー API パラメーターでコマンドを発行するために使用されない可能性があります。 これには、クライアントと コマンド ヘルパーに提供されるサーバー API パラメーターが同一の場合が含まれます。 クライアントがサーバー API パラメーターで構築されている場合、別の API パラメーター(またはまったく)送信するには、新しいクライアントを最初から構築するか、 withメソッドを使用して構築する必要があります。

サーバー API パラメーターは、クライアント レベルでのみ指定できます。 データベース、コレクション、セッション、トランザクション、または個々の操作レベルでは指定できません。

ドライバーのデフォルト構成は本番環境の配置に適しています。 開発では、開発者エクスペリエンスを向上させるために一部の設定を調整することができます。

  • :server_selection_timeout: MongoDB サーバーがローカルで実行され、手動で起動する場合は、これを低い値(例: 1 )に設定します。 サーバー選択タイムアウトが短いと、サーバーが実行されていない場合にドライバーがすぐに失敗します。

Ruby ドライバーを使用してアプリケーションを本番環境にデプロイする場合は、次の点を考慮してください。

  • ドライバー バージョン 2.11 以降では、 :min_pool_sizeクライアント オプションは完全に尊重されます。ドライバーは、スタンドアロン、プライマリ、またはセカンダリとして識別される各サーバーへのその数の接続を作成します。 以前のドライバー バージョンでは、ドライバーはオンデマンドで接続を作成していました。 :min_pool_sizeを使用するアプリケーションでは、ドライバー バージョン 2.11 以降、すべてのサーバーへのアイドル接続数が増加し、特にレプリカセット配置のセカンダリとシャーディングされたクラスター内のノードへのアイドル接続が増加します。

  • アプリケーションが別のウェブサーバーまたはロードバランサーによって逆プロキシされる場合、 server_selection_timeoutは通常、逆プロキシの読み取りタイムアウトよりも低い値に設定する必要があります。 たとえば、Help リクエスト タイムアウト は30 秒であり、構成不可にMongoDB を使用して Ruby アプリケーションを Helku に配置する場合は、サーバー選択タイムアウトを20 秒または15 秒に短縮することを検討してください。

以下は、 mongo Rubyドライバーが提供する機能フラグのリストです。

Flag
説明

broken_view_aggregate

このフラグがオフの場合、ビューで実行される集計は、コレクション内のすべてのドキュメントではなく、そのビューに含まれるドキュメントに対して実行されます。 このフラグがオンの場合、ビューフィルターは無視され、ビューのコレクション内のすべてのドキュメントに集計が適用されます。 (デフォルト: true)

broken_view_options

このフラグをオフにすると、表示オプションはaggregatecountcount_documentsdistinct 、およびestimated_document_countメソッドに正しく伝達されます。 このフラグをオンに切り替えると、それらのメソッドで表示オプションは無視されます。 (デフォルト: true)

validate_update_replace

置換ドキュメントのルートにアトミック演算子($ で始まる演算子)が存在しないこと、および更新ドキュメントのルートにアトミック演算子のみがあることを検証します。 この機能フラグがオンになっている場合は、無効な更新ドキュメントまたは置換ドキュメントでエラーが発生し、オンでない場合は、ログに警告が出力されます。 (デフォルト: false)

これらの機能フラグは、 Mongoモジュールで直接設定することも、 optionsメソッドを使用して設定することもできます。

Mongo.validate_update_replace = true
Mongo.options = { validate_update_replace: true }

戻る

接続と構成