更新文档
此版本的文档已存档,不再提供支持。 查看最新文档,了解如何升级您的 Node.js 驱动程序版本。
您可以使用.updateOne()集合 更新单个文档方法。 updateOne()
方法接受过滤文档和更新文档。 如果查询与集合中的文档匹配,则该方法将更新文档中的更新应用于其中的字段和值。 更新文档包含更新操作符,指示该方法对匹配项进行的更改。
您可以使用作为updateOne()
方法的第二个参数传递的options
对象来指定其他查询选项。 如果没有文档与筛选器匹配,则将upsert
选项设置为true
以创建新文档。 有关更多信息,请参阅 updateOne() API 文档。
updateOne()
如果在执行过程中发生错误,updateOne() 引发异常。 如果您在更新文档中为不可变字段 _id
指定一个值,则该方法会引发异常。如果您的更新文档包含违反唯一索引规则的值,该方法将引发 duplicate
key error
异常。
注意
如果应用程序在更新后需要文档,您可以考虑使用 collection.findOneAndUpdate(). 方法,该方法的接口与 updateOne()
类似,但也会返回原始文档或更新后的文档。
例子
以下示例使用 $set
更新操作符来指定文档字段的更新值。有关更新操作符的更多信息,请参阅 MongoDB 更新操作符参考文档。
注意
可以使用此示例连接到 MongoDB 实例,并与包含样本数据的数据库进行交互。如需了解有关连接到 MongoDB 实例和加载示例数据集的更多信息,请参阅 使用示例指南 。
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 const database = client.db("sample_mflix"); 11 const movies = database.collection("movies"); 12 13 // create a filter for a movie to update 14 const filter = { title: "Random Harvest" }; 15 16 // this option instructs the method to create a document if no documents match the filter 17 const options = { upsert: true }; 18 19 // create a document that sets the plot of the movie 20 const updateDoc = { 21 $set: { 22 plot: `A harvest of random numbers, such as: ${Math.random()}` 23 }, 24 }; 25 26 const result = await movies.updateOne(filter, updateDoc, options); 27 console.log( 28 `${result.matchedCount} document(s) matched the filter, updated ${result.modifiedCount} document(s)`, 29 ); 30 } finally { 31 await client.close(); 32 } 33 } 34 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 plot: string; 10 title: string; 11 } 12 13 async function run() { 14 try { 15 const database = client.db("sample_mflix"); 16 const movies = database.collection<Movie>("movies"); 17 18 const result = await movies.updateOne( 19 { title: "Random Harvest" }, 20 { 21 $set: { 22 plot: `A harvest of random numbers, such as: ${Math.random()}`, 23 }, 24 }, 25 { upsert: true } 26 ); 27 console.log( 28 `${result.matchedCount} document(s) matched the filter, updated ${result.modifiedCount} document(s)` 29 ); 30 } finally { 31 await client.close(); 32 } 33 } 34 run().catch(console.dir);
如果运行上面的示例,应能看到以下输出:
1 document(s) matched the filter, updated 1 document(s)