跳到主要内容

MongoDB 更新文档

在使用 MongoDB 时,更新文档是一项非常常见的操作。无论是修改用户信息、更新文章内容还是其他数据,你都需要学会如何更新文档。MongoDB 提供了多种方法来更新文档,接下来就让我们一起学习这些方法吧!

更新文档的方法

使用 update() 方法

update() 方法用于更新集合中的文档。默认情况下,它只会更新匹配的第一个文档。

语法:

db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

示例:

假设你有一个名为 mycol 的集合,其中包含以下文档:

{ "_id" : ObjectId("5983548781331adf45ec5"), "title":"MongoDB Overview"}
{ "_id" : ObjectId("5983548781331adf45ec6"), "title":"NoSQL Overview"}
{ "_id" : ObjectId("5983548781331adf45ec7"), "title":"IoT Overview"}

你可以使用以下命令将标题为 "MongoDB Overview" 的文档的标题更新为 "New MongoDB Tutorial":

> db.mycol.update({'title':'MongoDB Overview'}, {$set:{'title':'New MongoDB Tutorial'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

如果你想更新多个文档,可以设置 multi 参数为 true

> db.mycol.update({'title':'MongoDB Overview'}, {$set:{'title':'New MongoDB Tutorial'}}, {multi:true})

使用 save() 方法

save() 方法用于替换集合中的现有文档。它会用传递给 save() 方法的新文档替换现有文档。

语法:

db.COLLECTION_NAME.save({_id:ObjectId(), NEW_DATA})

示例:

假设你想替换 _id507f191e810c19729de860ea 的文档,可以使用以下命令:

> db.mycol.save({
... "_id" : ObjectId("507f191e810c19729de860ea"),
... "title":"IoT New Topic",
... "by":"IoT"
... })
WriteResult({
... "nMatched" : 0,
... "nUpserted" : 1,
... "nModified" : 0,
... "_id" : ObjectId("507f191e810c19729de860ea")
... })

使用 findOneAndUpdate() 方法

findOneAndUpdate() 方法用于更新匹配的第一个文档,并返回更新后的文档。

语法:

db.COLLECTION_NAME.findOneAndUpdate(SELECTIOIN_CRITERIA, UPDATED_DATA)

示例:

假设你有一个名为 empDetails 的集合,其中包含以下文档:

> db.empDetails.insertMany([
... {
... First_Name: "张",
... Last_Name: "三",
... Age: "26",
... e_mail: "zhangsan@gmail.com",
... phone: "13800138333"
... },
... {
... First_Name: "李",
... Last_Name: "四",
... Age: "25",
... e_mail: "lisi@gmail.com",
... phone: "13800138444"
... },
... {
... First_Name: "王",
... Last_Name: "五",
... Age: "24",
... e_mail: "wangwu@gmail.com",
... phone: "13800138555"
... }
... ])

你可以使用以下命令更新名为 "五" 的文档的年龄和电子邮件:

> db.empDetails.findOneAndUpdate(
... {Last_Name: '五'},
... { $set: { Age: '30', e_mail: 'wangwu555@gmail.com' }}
... )
{
... "_id" : ObjectId("5dd6636870fb13eec3963bf5"),
... "First_Name" : "王",
... "Last_Name" : "五",
... "Age" : "30",
... "e_mail" : "wangwu555@gmail.com",
... "phone" : "13800138555"
... }

使用 updateOne() 方法

updateOne() 方法用于更新匹配的第一个文档。

语法:

db.COLLECTION_NAME.updateOne(<filter>, <update>)

示例:

> db.empDetails.updateOne(
... {Last_Name: '五'},
... { $set: { Age: '30', e_mail: 'wangwu555@gmail.com' }}
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 }

使用 updateMany() 方法

updateMany() 方法用于更新所有匹配的文档。

语法:

db.COLLECTION_NAME.updateMany(<filter>, <update>)

示例:

> db.empDetails.updateMany(
... {Age: { $gt: "25" }},
... { $set: { Age: '00' }}
... )
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

你可以通过 find() 方法查看更新后的文档:

> db.empDetails.find()

小结

通过本文,你已经学会了如何在 MongoDB 中更新文档。你可以使用 update()save()findOneAndUpdate()updateOne()updateMany() 方法来更新单个或多个文档。这些方法各有特点,可以根据你的需求选择合适的方法。希望这些内容能帮助你更好地操作 MongoDB 数据库!