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

ドキュメントの置換

このガイドでは、 Rubyドライバーを使用してMongoDBコレクション内のドキュメントに対して置換操作を実行する方法を学習できます。置換操作と、指定されたドキュメントから _idフィールドを除くすべてのフィールドと値が削除され、指定した新しいフィールドと値が追加されます。この操作は、1 つ以上のドキュメントの指定されたフィールドのみを変更する 更新操作とは異なります。

アップデート操作の詳細については、ドキュメントのアップデートガイドを参照してください。

このガイドの例では、Atlasサンプルデータセットsample_restaurantsデータベースの restaurantsコレクションを使用します。Rubyアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続する Mongo::Clientオブジェクトを作成し、次の値を database 変数と collection 変数に割り当てます。

database = client.use('sample_restaurants')
collection = database[:restaurants]

MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、MongoDBを使い始めるガイドを参照してください。

MongoDBでは、replace_one メソッドを使用して置換操作を実行できます。 このメソッドは、指定されたクエリフィルターに一致する最初のドキュメントから _idフィールドを除くすべてのフィールドを削除します。 次に、指定したフィールドと値が空のドキュメントに追加されます。

次のパラメータをreplace_oneメソッドに渡す必要があります。

  • クエリフィルター : 更新するドキュメントを指定します。クエリフィルターの詳細については、クエリの指定ガイドを参照してください。

  • 置換ドキュメント: 既存のフィールドと値を置き換えるフィールドと値を指定します。

次の例では、 replace_one メソッドを使用して、nameフィールドの値が "Primola Restaurant" であるドキュメントのフィールドと値を置き換えます。

filter = { name: 'Primola Restaurant' }
new_document = { name: 'Frutti Di Mare', cuisine: 'Seafood', borough: 'Queens' }
result = collection.replace_one(filter, new_document)
puts "Replaced #{result.modified_count} document(s)"
Replaced 1 document(s)

重要

_idフィールドの値は不変です。 置き換えドキュメントで_idフィールドの値を指定する場合、既存のドキュメントの _id 値と同じである必要があります。そうでない場合、ドライバーは WriteError を発生させます。

置換操作を構成するオプションを設定するには、Hashオブジェクトをreplace_one メソッドのパラメーターとして渡します。オプションを指定しない場合、ドライバーはデフォルト設定で置換操作を実行します。

次の表では、置換操作を構成するために使用できるオプションについて説明します。

オプション
説明

upsert

クエリフィルターに一致するドキュメントがない場合に、置換操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Serverマニュアルの「 アップサートの動作 」を参照してください。デフォルトは
falseです。

bypass_document_validation

アップデート操作がドキュメント検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは
falseです。

collation

結果をソートするときに使用する言語照合の種類を指定します。 詳細については、MongoDB Server マニュアルの 「照合」 を参照してください。

session

操作に使用するセッションを指定します。セッションの詳細については、 MongoDB Serverマニュアルの 「クライアント セッションと因果整合性の保証」 を参照してください。

hint

ドキュメントをマッチングするときに使用するインデックスを設定します。 詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。

let

操作の最上位変数を設定するためのパラメーター名と値のマップを提供します。値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。

次のコードは、前の例と同じ置換操作を実行しますが、upsert オプションを true に設定します。これは、クエリフィルターが既存のドキュメントと一致しない場合、置換ドキュメントで指定されたフィールドと値を含む新しいドキュメントを挿入するようにドライバーに指示します。

options = { upsert: true }
result = collection.replace_one(filter, new_document, options)
puts "Replaced #{result.upserted_count} document(s)"
Replaced 1 document(s)

replace_one メソッドは Mongo::Operation::Update::Resultオブジェクトを返します。Resultインスタンスからの情報にアクセスするには、次のメソッドを使用できます。

方式
説明

matched_count

クエリフィルターに一致したドキュメントの数を返します。

modified_count

更新操作によって変更されたドキュメントの数を返します。 更新されたドキュメントが元と同一の場合、このカウントには含まれません。

upserted_count

アップサートされたドキュメントの数を返します。

upserted_id

ドライバーがデータベースにアップサートしたドキュメントの _id 値を返します(存在する場合)。

ドキュメントを置き換える方法を示す実行可能なコード例については、ドキュメントの挿入 を参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。