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

简介: 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"
    }}
)


相关文章
|
12月前
|
JSON NoSQL MongoDB
微服务——MongoDB常用命令——文档基本CRUD
本文介绍了MongoDB中文档的基本操作,包括插入、查询、更新和删除。单个文档插入使用`insert()`或`save()`方法,批量插入用`insertMany()`。查询所有文档用`find()`,条件查询可在`find()`中添加参数,投影查询控制返回字段。更新文档通过`update()`实现,支持覆盖修改、局部修改(使用`$set`)和批量修改。列值增长可用`$inc`实现。删除文档用`remove()`,需谨慎操作以免误删数据。此外,文档键值对有序,区分大小写,不能有重复键。
268 1
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
472 1
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
587 17
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
544 9
|
NoSQL MongoDB 数据库
python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)
这篇文章提供了使用Python操作MongoDB数据库进行CRUD(创建、读取、更新、删除)操作的详细代码示例,以及如何执行聚合查询的案例。
387 6
|
SQL NoSQL API
MongoDB 增删改查 常用sql总结
MongoDB 增删改查 常用sql总结
686 1
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之报错显示“Unsupported SQL query! sqlUpdate() only accepts SQL statements of type INSERT and DELETE"是什么意思
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
755 0
|
SQL 资源调度 NoSQL
实时计算 Flink版产品使用合集之使用Flink CDC SQL MongoDB Connector时,可以采取什么措施来提升数据消费速率
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
305 0
|
8月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”

推荐镜像

更多