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 document const 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
コレクションも使用します。「Atlas を使い始める」ガイドに従って、 MongoDB Atlasの無料階層のデータベースにロードできます。
次のコードは、1 つの置き換え操作を実行する完全なスタンドアロンファイルです。
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 async function run() { 9 try { 10 11 // Get the database and collection on which to run the operation 12 const database = client.db("sample_mflix"); 13 const movies = database.collection("movies"); 14 15 // Create a query for documents where the title contains "The Cat from" 16 const query = { title: { $regex: "The Cat from" } }; 17 18 // Create the document that will replace the existing document 19 const replacement = { 20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`, 21 }; 22 23 // Execute the replace operation 24 const result = await movies.replaceOne(query, replacement); 25 26 // Print the result 27 console.log(`Modified ${result.modifiedCount} document(s)`); 28 } finally { 29 await client.close(); 30 } 31 } 32 run().catch(console.dir);
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 interface Movie { 9 title: string; 10 } 11 12 async function run() { 13 try { 14 const database = client.db("sample_mflix"); 15 const movies = database.collection<Movie>("movies"); 16 17 const result = await movies.replaceOne( 18 { title: { $regex: "The Cat from" } }, 19 { 20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`, 21 } 22 ); 23 console.log(`Modified ${result.modifiedCount} document(s)`); 24 } finally { 25 await client.close(); 26 } 27 } 28 run().catch(console.dir);
上記の例を実行すると、次の出力が生成されます。
Modified 1 document(s)
API ドキュメント
このガイドで説明した型やメソッドの詳細については、次の API ドキュメントを参照してください。