5.更新文档
将文档存入数据库之后,可以使用以下几种更新方法之一对其进行更改,updateOne,updateMany和replaceOne.
updateOne和updateMany都将筛选文档作为第一个参数,将变更文档作为第二个参数,后者对要进行的更改进行描述。replaceOne同样将筛选文档作为第一个参数,但第二个参数是用一个用来替换所匹配的筛选文档的新文档。
更新文档是属于原子性操作:如果两个更新同时发生,那么首先到达服务器得的更新会先被执行,然后再执行下一个更新。因此,相互冲突的更新可以安全地迅速连接完成,而不会破坏任何文档,最后一次更新将”成功“。如果不想使用默认行为,则可以考虑使用文档版本控制模式.
> db.four.find(); { "_id" : 1, "name" : "ll", "age" : 20 }
使用修饰符"$set"
> db.four.updateOne({"_id":1},{"$set":{"age":22}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
更新后的数据
> db.four.find(); { "_id" : 1, "name" : "ll", "age" : 22 }
"$set"用来设置一个字段的值。如果这个字段不不存在,则创建该字段。这对于更新模式或添加用户定义的键来说非常方便。
- Update操作执行格式:db.<集合>.update(<查询条件>,<更新字段>)
- 以下面的数据为例
> db.fruit.insertMany([{name:"apple"},{name:"pear"},{name:"orange"}]) { "acknowledged" : true, "insertedIds" : [ ObjectId("625a67daa1fbd7dca4520184"), ObjectId("625a67daa1fbd7dca4520185"), ObjectId("625a67daa1fbd7dca4520186") ] } > > > db.fruit.find(); { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple" } { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" } { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" } >
> db.fruit.updateOne({"name":"apple"},{$set:{from:"China"}}) ##如果这里没有from字段的话,会直接进行添加。。。 { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > > db.fruit.find(); { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple", "from" : "China" } { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" } { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" } >
- 使用updateOne表示无论条件匹配多少条记录,始终只更新第一条
- 使用updateMany表示条件匹配多少条就更新多少条
- updateOne/updateMany方法要求更新条件部分必须具有以下之一,否则将报错:
- $set/$unset
- $push/$pushAll/$pop
- $pull/$pullAll
- $addToset
1.$push:增加一个对象到数组底部
2.$pushAll:增加多个对象到数组底部
3.$pop:从数组底部删除一个对象
4.$pull:如果匹配指定哦值,从数组中删除相应的对象
5.$pullAll:如果匹配任意的值,从数据中删除相应的对象
6.$addToset:如果不存在则增加一个值到数组。
这里示范更新一个子文档
> db.fruit.find() //原始的模样,这里要求把count字段的值有china更新为American { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple", "from" : "China" } { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" } { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" } { "_id" : ObjectId("625a7016a1fbd7dca4520187"), "name" : "apple", "from" : { "count" : "china", "province" : "Guangdong" } } >
更新操作:注意前面的是一个过滤条件,取具体的_id的那一列。。。然后后面的就是开始更新,注意from.count的写法(这个很重要)
> db.fruit.updateOne({"_id":ObjectId("625a7016a1fbd7dca4520187")},{$set:{"from.count":"Ame"}}) //更新 { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } >
这里还有一个需求是:我想把count字段修改为country字段
> db.fruit.updateOne({"_id":ObjectId("625a7016a1fbd7dca4520187")},{"$rename":{"from.count":"from.country"}},false,true) //这里使用关键词rename { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.fruit.find(); { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple", "from" : "China" } { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" } { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" } { "_id" : ObjectId("625a7016a1fbd7dca4520187"), "name" : "apple", "from" : { "province" : "Guangdong", "country" : "Ame" } } >
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
2021-04-16 5.Linux查看物理cpu个数、核数、逻辑cpu个数