ドキュメントの更新
You can update a single document using the collection.updateOne() method. The updateOne()
method accepts a filter document and an update document. If the query matches documents in the collection, the method applies the updates from the update document to fields and values of them. The update document contains update operators that instruct the method on the changes to make to the matches.
updateOne()
メソッドの 2 番目のパラメータとして渡されるoptions
オブジェクトを使用して、さらにクエリ オプションを指定できます。 フィルターに一致するドキュメントがない場合に新しいドキュメントを作成するには、 upsert
オプションをtrue
に設定します。 詳しくは、 updateOne() API ドキュメント を参照してください。
updateOne()
は、実行中にエラーが発生した場合に例外をスローします。更新ドキュメントで不変フィールド _id
の値を指定すると、メソッドは例外をスローします。更新ドキュメントにユニークインデックスのルールに違反する値が含まれている場合、メソッドは duplicate
key error
例外をスローします。
注意
アプリケーションで更新後にドキュメントが必要な場合は、 collection.findOneAndUpdate() 。メソッド。これはupdateOne()
と似たインターフェースですが、元のドキュメントまたは更新されたドキュメントも返します。
例
次の例では、ドキュメント フィールドの更新値を指定する $set
更新演算子を使用しています。更新演算子の詳細については、「MongoDB 更新演算子のリファレンス ドキュメント」を参照してください。
注意
この例を使用して、MongoDB のインスタンスに接続し、サンプルデータを含むデータベースと交流できます。MongoDB インスタンスへの接続とサンプルデータセットの読み込みの詳細については、 使用例ガイドを参照してください。
1 // Update a document 2 3 import { MongoClient } from "mongodb"; 4 5 // Replace the uri string with your MongoDB deployment's connection string 6 const uri = "<connection string uri>"; 7 8 const client = new MongoClient(uri); 9 10 async function run() { 11 try { 12 const database = client.db("sample_mflix"); 13 const movies = database.collection("movies"); 14 15 // Create a filter for movies with the title "Random Harvest" 16 const filter = { title: "Random Harvest" }; 17 18 /* Set the upsert option to insert a document if no documents match 19 the filter */ 20 const options = { upsert: true }; 21 22 // Specify the update to set a value for the plot field 23 const updateDoc = { 24 $set: { 25 plot: `A harvest of random numbers, such as: ${Math.random()}` 26 }, 27 }; 28 29 // Update the first document that matches the filter 30 const result = await movies.updateOne(filter, updateDoc, options); 31 32 // Print the number of matching and modified documents 33 console.log( 34 `${result.matchedCount} document(s) matched the filter, updated ${result.modifiedCount} document(s)`, 35 ); 36 } finally { 37 // Close the connection after the operation completes 38 await client.close(); 39 } 40 } 41 // Run the program and print any thrown errors 42 run().catch(console.dir);
1 // Update a document 2 3 import { MongoClient } from "mongodb"; 4 5 // Replace the uri string with your MongoDB deployment's connection string 6 const uri = "<connection string uri>"; 7 8 const client = new MongoClient(uri); 9 10 // Define the Movie interface 11 interface Movie { 12 plot: string; 13 title: string; 14 } 15 16 async function run() { 17 try { 18 const database = client.db("sample_mflix"); 19 const movies = database.collection<Movie>("movies"); 20 21 /* Update a document that has the title "Random Harvest" to have a 22 plot field with the specified value */ 23 const result = await movies.updateOne( 24 { title: "Random Harvest" }, 25 { 26 $set: { 27 plot: `A harvest of random numbers, such as: ${Math.random()}`, 28 }, 29 }, 30 /* Set the upsert option to insert a document if no documents 31 match the filter */ 32 { upsert: true } 33 ); 34 35 // Print the number of matching and modified documents 36 console.log( 37 `${result.matchedCount} document(s) matched the filter, updated ${result.modifiedCount} document(s)` 38 ); 39 } finally { 40 // Close the connection after the operation completes 41 await client.close(); 42 } 43 } 44 // Run the program and print any thrown errors 45 run().catch(console.dir);
上記の例を実行すると、次の出力が表示されます。
1 document(s) matched the filter, updated 1 document(s)