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

CRUD操作の構成

このガイドでは、 書込み保証( write concern ) 、 読み取り保証( read concern ) 、 読み込み設定( read preference ) の構成を使用して、MongoDB がレプリカセットに対して作成、読み取り、アップデート、削除(CRUD)操作を実行する方法を変更する方法を説明します。

次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。

  • クライアント(オーバーライドされない限り、すべての操作実行にデフォルトを設定します)

  • セッション

  • トランザクション

  • Database

  • コレクション

前のリストは、 オプション設定の優先順位の増加順も示しています。例、トランザクションに読み取り保証 (read concern)レベルを設定すると、クライアントに設定された読み取り保証 (read concern)レベルが上書きされます。

これらのオプションを使用すると、レプリカセット内のデータの因果整合性と可用性をカスタマイズできます。

書込み保証 (write concern) は、挿入や更新などの書込み (write) 操作について MongoDB から要求される確認応答のレベルを指定します。その後、操作は正常に返されます。 明示的な書込み保証(write concern)を指定しない操作は、グローバルなデフォルトの書込み保証(write concern)設定を継承します。

詳細については、 MongoDB Serverマニュアルの書込み保証を参照してください。詳細なAPIドキュメントについては、書込み保証 (write concern) APIドキュメントを参照してください。

以下の表では、 write_concernパラメータを説明しています。

Parameter
タイプ
説明

w (任意)

整数または文字列

指定された数の mongod インスタンスまたは指定されたタグを持つラベルの付いた mongod インスタンスに、書込み (write)操作が反映されたことの確認応答を要求します。

wtimeoutMS (任意)

integer

書込み (write) 操作が無期限にブロックされないように時間制限を指定します。

journal (任意)

ブール値

書き込み (write)操作が ディスク上のジャーナルに書き込まれたことの確認を要求します。

次のコードでは、新しいドキュメントを作成し、wと wtimeout の書込み保証 (write concern)設定を指定します。

client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'myDB')myDB = client.databasemyCollection = myDB[:myCollection] myCollection.insert_one( { name: 'anotherDocumentName' }, write: { w: 2, wtimeout: 5000 })

次のコードでは、new_write_concern メソッドを使用して、既存のデータベース参照(myDB)のオプションから write_concern を構築します。次に、新しい書込み保証 (write concern)が挿入されたドキュメントに適用されます。

myDoc = { name: 'New Document' }new_write_concern = Mongo::WriteConcern.get(myDB.write_concern)myDB[:myCollection].with(write: new_write_concern).insert_one(myDoc)

注意

myDB は、 書込み保証 (write concern)オプションを受け入れる任意のエンティティへの参照に置き換えることができます。

読み取り保証 (read concern) は、次の動作を指定します。

読み取り保証 (read concern)設定は、level パラメータを使用して指定できます。デフォルトの読み取り保証 (read concern)レベルは local です。つまり、クライアントは接続先のレプリカセットクライアントからデータを返しますが、そのデータがすべてのレプリカセットメンバーに書き込まれた保証はありません。

注意

読み取り保証 (read concern)レベル 要件を低くすると、レイテンシが削減される可能性があります。

読み取り保証 (read concern) または読み取り保証 (read concern)レベルの詳細については、 MongoDB Serverマニュアルの「 読み取り保証 (read concern) 」を参照してください。read_concern のタイプと読み取り保証 (read concern)レベルの定義の詳細については、 APIドキュメントの「 読み取り保証(read concern) 」を参照してください。

次のコードでは、集計の読み取り保証 (read concern)レベルを "available" に設定します。

pipeline = [ { "$match" => { category: 'KITCHENWARE' } }, { "$unset" => ['_id', 'category'] }]result = myCollection.aggregate(pipeline,read: { read_concern: { level: :available } })

Tip

集計操作の詳細については、集計によるデータの変換ガイドを参照してください。

次のコードでは、データベースの読み取り保証 (read concern)レベルを "local" に変更します。

client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'mydb', read_concern: { level: :local })myDB = client.database

読み込み設定 (read preference) は、クエリの実行中時にMongoDB がレプリカセットのどのノードを読み込むかを決定します。

詳細なAPIドキュメントについては、読み込み設定 (read preference) APIドキュメントを参照してください。

次の表には、サーバーがメンバーを評価する方法をカスタマイズするために使用できるオプションが示されています。

Parameter
タイプ
説明

mode

Symbol

サーバーが読み取りを行うレプリカセット メンバーの要件または設定を指定します。 デフォルト モード、 :primaryでは、レプリカセットのプライマリ メンバーから操作によって読み取りが行われることを指定します。

tags (任意)

Array<Hash>

セカンダリ レプリカセット ノードにタグを割り当てて、サーバーによる評価方法をカスタマイズします。 :primary読み込み設定(read preference)モード設定では、タグは使用できません。

options (任意)

Hash

読み込み設定(read preference)に適用できるヘッジやmaxStalenessSecondsなどのさまざまなオプションを設定します。

次のコードは、トランザクション内の操作の読み込み設定 (read preference)、読み取り保証 (read concern)) 、書込み保証 (write concern)を設定します。

transaction_options = { read: { mode: :primary }, read_concern: { level: :local }, write_concern: { w: :majority }}session = client.start_sessionsession.start_transaction(transaction_options)session.commit_transaction# ...rescue => e session.abort_transaction puts "Transaction aborted due to an error: #{e.message}"ensure session.end_sessionend

Tip

トランザクションの詳細については、トランザクションガイドを参照してください。

次のコード例では、クラスターでクエリを実行するときに secondary読み込み設定 (read preference)モードを使用する MongoClient を作成します。

uri = 'mongodb+srv://<user>:<password>@<cluster-url>'options = { read: { mode: :secondary, max_staleness: 120 }}client = Mongo::Client.new(uri, options)myDB = client.database

上記の例では、maxStalenessSeconds オプションも 120 に設定されています。接続文字列オプションの詳細については、 MongoDB Serverマニュアルの「 接続文字列オプション 」セクションを参照してください。

Rubyドライバーは、ネットワークまたはサーバーエラーにより失敗した場合、特定の読み取りおよび書込み操作が自動的に再試行されます。

新しいクライアントを 作成する ときに、retry_reads または retry_writes オプションを false に設定することで、最新の再試行可能な読み取りまたは再試行可能な書込みを明示的に無効にすることができます。false に設定すると、レガシー再試行動作が有効になります。

注意

レガシーな再試行動作は非推奨となりました

Rubyドライバーバージョン 2.25 以降、レガシーな再試行動作は非推奨となり、将来のドライバーバージョンで削除される予定です。レガシーな再試行調整オプション max_read_retries、read_retry_interval、および max_write_retries も非推奨になりました。クライアントでこれらのオプションのいずれかを設定すると、ドライバーは非推奨の警告を発行します。最新の再試行可能な読み取りと書き込み (write)は、デフォルトで有効になっています。

次の例では、クライアントの最新の再試行可能な読み取りと書込みを無効にします。

uri = 'mongodb+srv://<user>:<password>@<cluster-url>'options = { retry_reads: false, retry_writes: false }client = Mongo::Client.new(uri, options)myDB = client.database

サポートされている再試行可能な読み取り操作の詳細については、 MongoDB Serverマニュアルの「 再試行可能な読み取り 」を参照してください。サポートされている再試行可能な書込み操作の詳細については、 MongoDB Serverマニュアルの「 再試行可能な書込み 」を参照してください。

このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。