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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Not Only SQL (五) - MongoDB Introduce & CRUD (下)

更新文档

更新文档命令

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

更新整篇文档

如果中不包含任何更新操作符,那么db..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"})
复制代码

754d1a4c099a4c6292661b3ab534af0d_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.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"})
复制代码

bcae70f631ac4c2f88b8d0619a7a6720_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

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

32598adcf7444a3c9004689e70ce8a80_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

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

39a716fd4eab4bdfa73a04397db588ad_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

更新文档的特定字段

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

如果文档中只包含更新操作符,db..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字段

9d218e29abd2495cbbdc2cddd066cbf3_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

再次查询name为allen的文档

1fac1a158611423badeebd7003b6dcd1_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

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

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

c4189119b00446ab8b92101bbc2838e2_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

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

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

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

50f0fa5da0ac45bba93376b63da57e2c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

往内嵌数组中增加内容

3b231bc33716484db98f0cd8afafaad6_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

55e4d0015aaf4ea6bb0a96ae9611e9a9_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.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": ""
    }}
)
复制代码

68ec9285db8642519701ae01eeea7173_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

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

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


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
NoSQL Java MongoDB
Springboot WebFlux项目结合mongodb进行crud
这篇文章介绍了如何使用Spring Boot WebFlux框架结合MongoDB进行基本的CRUD(创建、读取、更新、删除)操作,包括项目设置、实体类和Repository的创建、控制器的实现以及配置文件的编写。
55 0
Springboot WebFlux项目结合mongodb进行crud
|
6月前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
284 1
|
3月前
|
NoSQL MongoDB 数据库
python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)
这篇文章提供了使用Python操作MongoDB数据库进行CRUD(创建、读取、更新、删除)操作的详细代码示例,以及如何执行聚合查询的案例。
38 6
|
5月前
|
SQL NoSQL API
MongoDB 增删改查 常用sql总结
MongoDB 增删改查 常用sql总结
208 1
|
7月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之报错显示“Unsupported SQL query! sqlUpdate() only accepts SQL statements of type INSERT and DELETE"是什么意思
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
297 0
|
7月前
|
SQL 资源调度 NoSQL
实时计算 Flink版产品使用合集之使用Flink CDC SQL MongoDB Connector时,可以采取什么措施来提升数据消费速率
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
107 0
|
7月前
|
NoSQL MongoDB 数据库
MongoDB黑窗口操作(CRUD)
MongoDB黑窗口操作(CRUD)
|
7月前
|
存储 SQL NoSQL
第3期 MongoDB与SQL存储
第3期 MongoDB与SQL存储
106 0
|
7月前
|
SQL XML Java
MyBatis Plus通用CRUD与条件构造器使用及SQL自动注入原理分析
MyBatis Plus通用CRUD与条件构造器使用及SQL自动注入原理分析
309 0
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
下一篇
DataWorks