Docs 菜单
Docs 主页
/ / /
Node.js
/ /

更新文档

您可以使用.updateOne()集合 更新单个文档方法。 updateOne()方法接受过滤文档和更新文档。 如果查询与集合中的文档匹配,则该方法将更新文档中的更新应用于其中的字段和值。 更新文档包含更新操作符,指示该方法对匹配项进行的更改。

您可以使用作为updateOne()方法的第二个参数传递的options对象来指定其他查询选项。 如果没有文档与筛选器匹配,则将upsert选项设置为true以创建新文档。 有关更多信息,请参阅 updateOne() API 文档。

updateOne() 如果在执行过程中发生错误,updateOne() 引发异常。 如果您在更新文档中为不可变字段 _id 指定一个值,则该方法会引发异常。如果您的更新文档包含违反唯一索引规则的值,该方法将引发 duplicate key error 异常。

注意

如果应用程序在更新后需要文档,您可以考虑使用 collection.findOneAndUpdate(). 方法,该方法的接口与 updateOne() 类似,但也会返回原始文档或更新后的文档。

以下示例使用 $set 更新操作符来指定文档字段的更新值。有关更新操作符的更多信息,请参阅 MongoDB 更新操作符参考文档。

注意

可以使用此示例连接到 MongoDB 实例,并与包含样本数据的数据库进行交互。如需了解有关连接到 MongoDB 实例和加载示例数据集的更多信息,请参阅 使用示例指南 。

1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8async 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}
34run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8interface Movie {
9 plot: string;
10 title: string;
11}
12
13async 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}
34run().catch(console.dir);

如果运行上面的示例,应能看到以下输出:

1 document(s) matched the filter, updated 1 document(s)

后退

更新和替换操作