替换文档
您可以使用 集合 .replaceOne() 替换单个文档方法。 replaceOne()
接受查询文档和替换文档。如果该查询与集合中的某个文档匹配,则会用所提供的替换文档替换与该查询匹配的第一个文档。 此操作会删除原始文档中的所有字段和值,并将其替换为替换文档中的字段和值。 除非您在替换文档中明确指定新的 _id
值,否则 _id
字段的值保持不变。
您可以使用可选的 options
参数来指定更多选项,例如 upsert
。如果将 upsert
选项字段设置为 true
,该方法会在没有文档匹配查询的情况下插入一个新文档。
如果在执行过程中发生错误,replaceOne()
方法会抛出异常。例如,如果您指定的值违反了唯一索引规则,replaceOne()
会抛出 duplicate key error
。
注意
如果您的应用程序在更新后需要该文档,请使用 collection.findOneAndReplace()方法,其接口与replaceOne()
类似。 您可以将findOneAndReplace()
配置为返回原始匹配文档或替换文档。
例子
注意
可以使用此示例连接到 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 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)