前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Not Only SQL (五) - MongoDB Introduce & CRUD (下)

Not Only SQL (五) - MongoDB Introduce & CRUD (下)

作者头像
RiemannHypothesis
发布2022-08-19 16:49:27
2060
发布2022-08-19 16:49:27
举报
文章被收录于专栏:Elixir

更新文档

更新文档命令

  • db.<collection>.update()
  • db.<collection>.findAndModify()
  • db.<collection>.save()
代码语言:javascript
复制
db.<collection>.update(<query>, <update>, <options>)
  • <query>:定义了更新文档操作时筛选文档的条件
  • <update>:提供了更新的内容
  • <options>:声明的一些更新操作的参数

更新整篇文档

如果<update>中不包含任何更新操作符,那么db.<collections>.update()命令将会使用<update>中的文档直接替换符合筛选条件的文档

代码语言:javascript
复制
// 查找name为stark的文档
db.accounts.find({name: "stark"})

// 更新name为stark的文档的balance字段值为20000
db.accounts.update({name: "stark"}, {name: "stark", balance: 20000})

// 再次查看更新后的文档
db.accounts.find({name: "stark"})

几个需要注意的事项

  • 文档的主键_id是不可以更改的
  • 更新整篇文档是可以不用携带主键_id,如果包含主键_id则必须要和被更新的文档的_id保持一致
  • 只有第一篇符合筛选条件的文档才会被更新
  • 更新整篇文档的操作只能引用在单一文档上
代码语言:javascript
复制
// 更新name为stark的文档的balance字段值为20000, _id字段必须和被更新的文档的_id一致
db.accounts.update({name: "stark"}, {_id: "account1", name: "stark", balance: 30000})

// 再次查看更新后的文档
db.accounts.find({name: "stark"})

<update>文档中包含的_id字段和被更新文档包含的_id字段不一致情况下会报错

只有第一篇符合筛选条件的文档才会被更新

更新文档的特定字段

代码语言:javascript
复制
db.<collection>.update(<query>, <update>, <options>)

如果<update>文档中只包含更新操作符,db.<collection>.update命令将会使用<update>文档更新集合中符合筛选条件的文档中的特定字段

更新操作符

  • $set:更新或者新增字段
  • $unset:删除字段

$set,更新或者新增字段

代码语言:javascript
复制
db.<collection>.update(
    {<query>},
    {$set: {<field1: value1>, <field2>: <value2>,...}}
)
代码语言:javascript
复制
// 更新name为allen的文档的balance字段并新增info字段
db.accounts.update(
    {name: "allen"},
  {$set: {
    balance: 3000,
    info: {
      dateOpened: new Date(),
      branch: "branch1"
    },
  }}
)

更新name为allen的文档的balance字段并新增info字段

再次查询name为allen的文档

更新或者新增内嵌文档的字段

代码语言:javascript
复制
// 更新name为allen文档中info字段下的dateOpened字段
db.accounts.update(
    {name: "allen"},
  {$set: {"info.dateOpened": new Date()}}
)

可以通过.调用内嵌的字段

代码语言:javascript
复制
// 更新name为allen文档中contact字段下的数组中的第一个字段的value
db.accounts.update(
    {name: "allen"},
  {$set: {"contact.0": 22222222}}
)

更新内嵌数组中的值可以使用 .索引 的方式更新

往内嵌数组中增加内容

如果向现有数组字段范围外的位置增加新值,数组字段的长度会扩大,未被赋值的数组成员将被设置为null

$unset,删除字段

代码语言:javascript
复制
db.<collection>.update(
    {<query>},
    {$unset: {<field1: value1>, <field2>: <value2>,...}}
)
代码语言:javascript
复制
// 删除name为allen的文档的balance字段和info字段下的branch字段
db.accounts.update(
    {name: "allen"},
    {$unset: {
        balance: "",
        "info.branch": ""
    }}
)

$unset命令中的赋值""对操作结果没有任何影响

代码语言:javascript
复制
// 删除name为allen的文档的balance字段和info字段下的branch字段
db.accounts.update(
    {name: "allen"},
    {$unset: {
        "info.dateOpened": "any value"
    }}
)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 更新文档
    • 更新文档命令
      • 更新整篇文档
        • 更新文档的特定字段
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档