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" } }
> 

 

posted on   太白金星有点烦  阅读(76)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
历史上的今天:
2021-04-16 5.Linux查看物理cpu个数、核数、逻辑cpu个数

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示