首页 > 数据库 >MongoDB CRUD操作:更新文档

MongoDB CRUD操作:更新文档

时间:2024-05-31 23:30:41浏览次数:23  
标签:MongoDB CRUD 更新 item 字段 文档 uom

MongoDB CRUD操作:更新文档

文章目录

可以使用下面的方式更新MongoDB集合的文档:

  • 使用编程语言提供的驱动程序,在应用中调用API进行更新。
  • 使用MongoDB Atlas UI更新文档。
  • 使用MongoDB Compass、mongosh。
  • 使用其他第三方工具。

使用下面的脚本创建inventory集合,下面的例子会使用inventory集合:

db.inventory.insertMany( [
   { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

更新集合中的文档

MongoDB提供了更新操作符(如 $set)对字段值进行修改,在使用更新操作符时,需要向更新方法传递如下格式的文档:

{
  <update operator>: { <field1>: <value1>, ... },
  <update operator>: { <field2>: <value2>, ... },
  ...
}

一些更新操作符如$set,在字段不存在时会自动创建字段。另外,MongoDB可以接受聚合管道作为更新文档。

更新单个文档

下面的例子使用db.collection.updateOne()方法,更新inventory集合中第一个item"paper"的文档:

db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

在这个更新操作中:

  • 使用$set操作符将字段size.uomstatus的值分别更新为"cm""P"
  • 使用$currentDate操作符将lastModified字段的值更新为当前日期,如果lastModified字段不存在,会被自动创建。

更新多个文档

下面的例子使用db.collection.updateMany()方法,对inventory集合中所有qty字段为50的文档进行更新:

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

在这个更新操作中:

  • 使用$set操作符将字段size.uomstatus的值分别更新为"cm""P"
  • 使用$currentDate操作符将lastModified字段的值更新为当前日期,如果lastModified字段不存在,会被自动创建。

文档替换

如果要替换除_id字段的全部内容,可将全新文档作为第二个参数传递给db.collection.replaceOne()

替换文档时,替换文档必须仅包含字段/值对;即不包括更新运算符表达式。

替换文档可以具有与原始文档不同的字段。在替换文档中,可以省略_id字段,因为_id字段是不可变的;如果非要包含_id字段,它的值必须与当前值相同。

下面的实力替换inventory集合的第一个item"paper"的文档:

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

在MongoDB Atlas中更新文档

在 MongoDB Atlas UI 中,一次只能更新一个文档。要更新多个文档或替换整个文档,可以使用mongosh或MongoDB驱动程序连接到Atlas部署,并按照上面的示例进行操作。

下面的示例使用了sample_supplies样本数据集。在MongoDB Atlas中进行文档更新可以按照下面的步骤进行操作:

  1. 打开集合

    • 打开MongoDB Atlas UI,点击侧边栏的Database
    • 找到对应的数据库实例,点击Browse Collections
    • 在左侧的导航面板选择sample_supplies数据库
    • 在左边的导航面板选择sales集合
  2. 指定文档的过滤条件
    可以给Field字段为文档指定一个过滤条件,用于搜索符合条件的文档。

    将下面的查询条件文档拷贝到搜索栏的Filter字段,然后点击Apply

    { saleDate: { $gte: { $date: "2016-01-01T00:00-00:00" }, $lte: { $date: "2016-01-02T00:00-00:00" } } }
    

    查询条件返回sample_supplies.sales集合中saleDate字段在UTC时间2016年1月1日至2日之间的所有文档。

  3. 编辑文档

    要编辑查询结果中显示的文档,可将鼠标悬停在该文档上并单击铅笔图标。在文档编辑器中,可以:

    • 添加新字段。
    • 删除现有字段。
    • 编辑字段的名称、值或类型。
    • 恢复特定更改。
  4. 保存更改

    点击Update按钮,可确认并保存更改。

更新行为

原子性

在MongoDB中,单个文档的写操作具有原子性。

_id字段

一旦设置,就不能更新_id字段的值,也不能用具有不同_id字段值的替换文档替换现有文档。

字段顺序

对于写入操作,MongoDB 会保留文档字段的顺序,但以下情况除外:

  • _id字段始终是文档中的第一个字段。
  • 包括重命名字段名称的更新可能会导致文档中字段的重新排序。

Upsert选项

如果updateOne()updateMany()ReplaceOne()包含upsert : true并且没有文档与指定的过滤器匹配,则该操作将创建一个新文档并将其插入。如果存在匹配的文档,则该操作将修改或替换匹配的一个或多个文档。

写确认

通过写关注,可以指定MongoDB对写操作进行确认的级别。

标签:MongoDB,CRUD,更新,item,字段,文档,uom
From: https://blog.csdn.net/superatom01/article/details/139363260

相关文章

  • Python背记手册让我拿到了华为OD的Offer(附面经和文档)
    24届-Python面经(华为OD)4月4日-6日24应届,目标院校非科班。临近毕业,校招没找到合适的工作,因为自己算是零基础,先从栗栗姐给的几道入门基础题开始刷,熟悉一些常考的数据结构和算法,刚开始刷基本不太会,刷的也比较慢,后来偶然得到学姐的Python面试笔记,刷题速度飞升,编程和理解能力飞升......
  • 用Python脚本迁移MongoDB数据到金仓-kingbase数据库
    1、首先需要明确MongoDB与kingbase的对应关系,collection相当于table,filed相当于字段,根据这个对应关系创建表;此次迁移的MongoDB里的数据字段是:_id(自动生成的objectid),image(转成二进制存储的文档)所以在金仓里创建表createtableadmin(idvarchar,imagebytea);2、安装Python环境......
  • 前端学习-Dart官方文档学习-005-控制流
    官方文档链接Loops循环forloopswhileanddowhileloopsbreakandcontinueBranching,likeifandswitchExceptions,liketry,catch,andthrowfor、for-in、forEachvarcallbacks=[];for(vari=0;i<2;i++){callbacks.add(()=>print(i));}//Th......
  • excel 文档根据某几列生成 sql语句
    使用CONCATENATE函数CONCATENATE函数可将最多255个文本字符串连接成一个文本字符串。连接项可以是文本、数字、单元格引用或这些项的组合函数语法CONCATENATE(text1,[text2],...)textl:必需。表示要连接的第一个文本项。text2:可选。表示其他文本项,最多为255项。项与项之......
  • 怎么给PDF文档盖骑缝章
    PDF文档上盖骑缝章的过程相较于纸质合同有所不同,但在电子合同中也有相似的目的,下面是利用e-章宝(易友EU3000智能盖章软件)盖电子骑缝章的步骤:第一步:制作需要盖的电子印章一般是先扫描公章,然后使用e-章宝(易友EU3000智能盖章软件)的一键抠章功能,把印章导入到印章库中待用。......
  • mongodb数据库查询调优之explain方法详解
    在MongoDB中,explain()方法可以帮助我们了解查询语句的执行计划和性能。通过分析explain()的结果,我们可以找出潜在的性能问题并对其进行优化。以下是使用explain()方法对MongoDB查询语句进行优化的步骤:使用explain()方法获取查询的执行计划:db.collection.find(query).exp......
  • Timing 技术支持文档
    TechnicalSupportDocument:TimingCountdownAppWelcomeWelcometotheTimingCountdownApp!ThisdocumentwillprovideyouwithcomprehensiveguidanceonhowtousetheTimingapp,includingitsfeatures,stepsforcustomizingtasks,andhowtoobtaint......
  • 如何将图片识别成文字版word文档?
    在现代社会中,图片和文字的结合已经成为了一种常见的表达方式。我们可以通过图片来传达各种信息,比如广告、宣传等等。但有时候我们需要把图片中的文字提取出来,进行编辑和处理,这时候就需要把图片中的文字转换成word文档。下面给大家介绍几种常见的方法,帮助你解决图片如何成为word文......
  • PHP发票真假API在线文档、票据ocr识别、医疗票据查验
    翔云人工智能开放平台提供详细的发票查验API在线开发文档,不仅包含了PHP语言,还包含Java、python、go、C#、C++等众多的主流开发语言,便于有需要的用户快速的将发票查验功能集成到自己的系统或者应用中,极大的缩短了企业的开发时间和开发成本。翔云发票识别接口,运用自主OCR技术......
  • 基于springboot实习管理系统的设计与实现vue(源码+lw+部署文档+讲解等)
    前言......