Overview
このガイドでは、 Node.jsドライバーを使用してMongoDBコレクション内のドキュメントに対して置換操作を実行する方法を学習できます。置換操作は更新操作とは異なります。アップデート操作、ターゲットドキュメント内の指定されたフィールドのみが変更されます。置換操作、ターゲットドキュメント内のすべてのフィールドが削除され、新しいフィールドに置き換えられます。
ドキュメントの置き換え
置換操作を実行するには、置換操作で使用するフィールドと値で構成される置換ドキュメントを作成します。 Replacement documents use the following format:
{ <field>: { <value> }, <field>: { ... }}置換ドキュメントとは、クエリフィルターに一致する既存のドキュメントを置き換えるドキュメントです。
任意のoptionsパラメータを使用して、 upsertなどの他のオプションを指定できます。 upsertオプション フィールドをtrueに設定すると、クエリに一致するドキュメントがない場合、このメソッドは新しいドキュメントを挿入します。
replaceOne()メソッドは、実行中にエラーが発生した場合に例外をスローします。 たとえば、一意なインデックスのルールに違反する値を指定すると、 replaceOne()はduplicate key errorをスローします。
注意
アプリケーションで更新後にドキュメントが必要な場合は、コレクション.findOneAndReplace() を使用しますメソッド。これは replaceOne() と同様のインターフェースを持つものです。findOneAndReplace() を構成して、元の一致したドキュメントまたは置換ドキュメント のいずれかを返すことができます。
例
販売商品、その価格、利用可能な数量を説明するフィールドを持つmyDB.itemsコレクション内のドキュメントを例にとります。
{ _id: 501, item: "3-wick beeswax candle", price: 18.99, quantity: 10,}このドキュメントを、完全に異なるアイテムの説明を含むドキュメントに置き換えたいとします。 置き換え操作は、次のようになります。
const myDB = client.db("myDB");const myColl = myDB.collection("items");
const filter = { _id: 501 };
// replace the matched document with the replacement documentconst replacementDocument = { item: "Vintage silver flatware set", price: 79.15, quantity: 1,};const result = await myColl.replaceOne(filter, replacementDocument);置換されたドキュメントには、次のように、置換ドキュメントの内容と不変の_idフィールドが含まれます。
{ _id: 501, item: "Vintage silver flatware set", price: 79.15, quantity: 1,}置き換え操作がコレクション内のいずれかのドキュメントと一致しない場合、変更は行われません。 置換操作はアップサートを実行するように構成できます。これにより置換が実行されます。一致するドキュメントがない場合は、指定されたフィールドと値を持つ新しいドキュメントが挿入されます。
ドキュメントの_idフィールドを変更したり、 一意のインデックス制約に違反する値にフィールドを変更したりすることはできません。 一意なインデックス の詳細については、MongoDB Server マニュアルを参照してください。
replaceOne() の例: 完全なファイル
注意
セットアップ例
この例では、接続 URI を使用して MongoDB インスタンスに接続します。MongoDB インスタンスへの接続の詳細については、「MongoDB への接続」ガイドを参照してください。この例では、Atlas サンプル データセットに含まれる sample_mflix データベースの movies コレクションも使用します。MongoDB Get Startedに従って、MongoDB Atlasの無料クラスター上のデータベースに読み込むことができます。
次のコードは、1 つの置き換え操作を実行する完全なスタンドアロンファイルです。
import { MongoClient } from "mongodb";
// Replace the uri string with your MongoDB deployment's connection string.const uri = "<connection string uri>";
const client = new MongoClient(uri);
async function run() { try { // Get the database and collection on which to run the operation const database = client.db("sample_mflix"); const movies = database.collection("movies");
// Create a query for documents where the title contains "The Cat from" const query = { title: { $regex: "The Cat from" } }; // Create the document that will replace the existing document const replacement = { title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`, };
// Execute the replace operation const result = await movies.replaceOne(query, replacement); // Print the result console.log(`Modified ${result.modifiedCount} document(s)`); } finally { await client.close(); }}run().catch(console.dir);import { MongoClient } from "mongodb";
// Replace the uri string with your MongoDB deployment's connection string.const uri = "<connection string uri>";
const client = new MongoClient(uri);
interface Movie { title: string;}
async function run() { try { const database = client.db("sample_mflix"); const movies = database.collection<Movie>("movies");
const result = await movies.replaceOne( { title: { $regex: "The Cat from" } }, { title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`, } ); console.log(`Modified ${result.modifiedCount} document(s)`); } finally { await client.close(); }}run().catch(console.dir);上記の例を実行すると、次の出力が生成されます。
Modified 1 document(s)API ドキュメント
このガイドで説明した型やメソッドの詳細については、次の API ドキュメントを参照してください。