阅读 98

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

更新文档

更新文档命令

  • db.<collection>.update()

  • db.<collection>.findAndModify()

  • db.<collection>.save()

db.<collection>.update(<query>, <update>, <options>) 复制代码

  • <query>:定义了更新文档操作时筛选文档的条件

  • <update>:提供了更新的内容

  • <options>:声明的一些更新操作的参数

更新整篇文档

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

// 查找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"}) 复制代码

image.png 几个需要注意的事项

  • 文档的主键_id是不可以更改的

  • 更新整篇文档是可以不用携带主键_id,如果包含主键_id则必须要和被更新的文档的_id保持一致

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

  • 更新整篇文档的操作只能引用在单一文档上

// 更新name为stark的文档的balance字段值为20000, _id字段必须和被更新的文档的_id一致 db.accounts.update({name: "stark"}, {_id: "account1", name: "stark", balance: 30000}) // 再次查看更新后的文档 db.accounts.find({name: "stark"}) 复制代码

image.png

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

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

更新文档的特定字段

db.<collection>.update(<query>, <update>, <options>) 复制代码

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

更新操作符

  • $set:更新或者新增字段

  • $unset:删除字段

$set,更新或者新增字段

db.<collection>.update(     {<query>},     {$set: {<field1: value1>, <field2>: <value2>,...}} ) 复制代码

// 更新name为allen的文档的balance字段并新增info字段 db.accounts.update( {name: "allen"},   {$set: {     balance: 3000,     info: {       dateOpened: new Date(),       branch: "branch1"     },   }} ) 复制代码

更新name为allen的文档的balance字段并新增info字段 image.png 再次查询name为allen的文档

image.png

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

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

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

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

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

image.png

往内嵌数组中增加内容

image.png

image.png

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

$unset,删除字段

db.<collection>.update(     {<query>},     {$unset: {<field1: value1>, <field2>: <value2>,...}} ) 复制代码

// 删除name为allen的文档的balance字段和info字段下的branch字段 db.accounts.update(     {name: "allen"},     {$unset: {         balance: "",         "info.branch": ""     }} ) 复制代码

image.png

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

// 删除name为allen的文档的balance字段和info字段下的branch字段 db.accounts.update(     {name: "allen"},     {$unset: {         "info.dateOpened": "any value"     }} )


作者:RiemannHypo
链接:https://juejin.cn/post/7066450632558772237

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐