MongoDB 更新文档(更新数组对象中的元素)

这篇具有很好参考价值的文章主要介绍了MongoDB 更新文档(更新数组对象中的元素)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前我们介绍了如何更新文档,并简单的介绍了更新文档时可以使用选项进行指定当更新内容不存在时,可以进行新增文档。具体可以参考:

MongoDB 更新文档(更新一条文档)https://blog.csdn.net/m1729339749/article/details/129983304
最近遇到了一个需求,文档中包含了一个数组对象,需要筛选数组对象中满足条件的元素进行更新

一、准备数据

向批次中新增两个批次的商品数据

db.batch.insertMany([
    { "_id": 1, "foods": [
          { "name": "苹果", "total": "20" },
          { "name": "可口可乐", "total": "30" },
          { "name": "北京方便面", "total": "10" }  
      ] 
    },
    { "_id": 2, "foods": [
          { "name": "伊利纯牛奶", "total": "5" },
          { "name": "可口可乐", "total": "20" },
          { "name": "营养快线", "total": "20" }  
      ] 
    },
]);

二、arrayFilters

语法:

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

其中arrayFilters用于过滤数组对象中的元素。

例子:找到营养快线的数量为20的元素,并将数量更新为30

(1)查询营养快线的数量为20的文档

db.batch.find(
    { 
        "foods.name": "营养快线", 
        "foods.total": "20" 
    }
)

查询的结果如下:

{
	"_id" : 2,
	"foods" : [
		{
			"name" : "伊利纯牛奶",
			"total" : "5"
		},
		{
			"name" : "可口可乐",
			"total" : "20"
		},
		{
			"name" : "营养快线",
			"total" : "20"
		}
	]
}

(2)对营养快线的数量进行修改

db.batch.updateOne(
    { 
        "foods.name": "营养快线", 
        "foods.total": "20" 
    }, 
    {
        "$set": { "foods.$[element].total": "30" }
    },
    {
        "arrayFilters": [
            { 
                "element.name": "营养快线", 
                "element.total": "20"
            }
        ]
    }
)

其中,

arrayFilters:代表的是对数组中的元素进行过滤,找到满足条件的数组中的元素后执行更新操作。

$[element]:代表的是过滤定位符,用于定位每一条数组元素。

执行完操作后,数组中的元素会被修改,修改后的文档如下:

{
	"_id" : 1,
	"foods" : [
		{
			"name" : "苹果",
			"total" : "20"
		},
		{
			"name" : "可口可乐",
			"total" : "30"
		},
		{
			"name" : "北京方便面",
			"total" : "10"
		}
	]
}
{
	"_id" : 2,
	"foods" : [
		{
			"name" : "伊利纯牛奶",
			"total" : "5"
		},
		{
			"name" : "可口可乐",
			"total" : "20"
		},
		{
			"name" : "营养快线",
			"total" : "30"
		}
	]
}

从文档中可以看出,营养快线的数量被修改成了30文章来源地址https://www.toymoban.com/news/detail-647353.html

到了这里,关于MongoDB 更新文档(更新数组对象中的元素)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MongoDB-数据库文档操作(1)

    任务描述 文档数据在 MongoDB 中的插入和更新。 相关知识 本文将向大家介绍文档数据在 MongoDB 中的基本操作。 文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式。BSON 是一种类 JSON 的一种二进制形式的存储格式,简称: Binary JSON 。 本文将教你掌握:

    2024年01月17日
    浏览(47)
  • mongodb 数据库管理(数据库、集合、文档)

    目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1)update() 方法 2)replace() 方法 创建数据库的语法格式如下: 如果数据库不存在,则创建数据库,否则切换到该数据

    2024年02月12日
    浏览(49)
  • 【文档数据库】ES和MongoDB的对比

    目录 1.由文档存储牵出的问题 2.什么是MongoDB? 3.ES和MongoDB的对比 本文或者说关于mongodb的这个系列文章的源头: 前面我们聊过了分布式链路追踪系统,在基于日志实现的分布式链路追踪的方式seluth+zipkin中为了防止数据丢失,需要将数据持久化。我们给出的是持久化进mysql中的

    2024年01月19日
    浏览(50)
  • 【MongoDB】数据库、集合、文档常用CRUD命令

    目录 一、数据库操作 1、创建数据库操作 2、查看当前有哪些数据库 3、查看当前在使用哪个数据库 4、删除数据库 二、集合操作 1、查看有哪些集合 2、删除集合 3、创建集合 三、文档基本操作 1、插入数据 2、查询数据 3、删除数据 4、修改数据 四、文档分页查询 五、文档其

    2024年02月13日
    浏览(43)
  • 通过Studio 3T对Mongodb进行 创建数据库/集合 增删查改集合文档操作

    首先 你需要安装Studio 3T 以及启动 Mongodb服务 具体可以参考我的文章 Studio 3T客户端连接Mongodb数据库服务 我们之前 通过 随便输切换是可以的 但除了这里能看到的 它们都仅存在于内存 我们右键顶部菜单 选择 添加数据库/创建数据库 这里 我们输入数据库名称 然后 点击OK 这样

    2024年02月01日
    浏览(56)
  • 删除数组中的指定元素或数组对象

    1.删除数组中的某个指定元素 1)首先获取元素下标,用indexOf()函数找到他的位置index,如果没有找到这个元素那么index将会等于-1;如下为找到元素2的下标 var array = [1,2,3]; var index = array.indexOf(2); 2)使用splice进行移除,删除第index位置的指定个数的元素,splice直接修改原数组,并

    2024年02月11日
    浏览(56)
  • js判断对象数组中的元素是否存在重复

     1、使用  Array.some()  方法和自定义比较函数: 使用  Array.some()  方法遍历数组,对每个元素执行自定义的比较函数。比较函数使用  Array.findIndex()  方法来查找与当前元素相等且索引不同的元素,如果找到则表示存在重复元素。 2、使用  Set  数据结构: 使用  Set  数据结

    2024年02月13日
    浏览(61)
  • MongoDB实验——在MongoDB集合中查找文档

    1.掌握在 MongoDB中查询文档操作 2.掌握查找单个文档、多个文档、使用查询运算符根据字段值查找文档,根据子文档查找文档的方法 MongoDB 支持多种复杂的查询方式,能实现大多数 T-SQL 功能,远不是 Key-Value 之类的 NoSQL DB 所能比拟的。 Conditional Operator : $lt , $lte =, $gt , $gte = Con

    2024年02月10日
    浏览(36)
  • MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找

     阿丹:         之前研究了MongoDB的基础增删改查。在学会基础的数据库增删改查肯定是不够的。这个时候就涉及到了数据库搜索的时候的效率。需要提高数据的搜索效率。         在所以数据库中如果没有数据索引的时候。如果需要查找到一些数据。都会去主动扫描所有

    2024年02月14日
    浏览(40)
  • 2. MongoDB分片集群架构实战-----MongoDB分片集群和多文档事务详解

    本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 课程内容: 1.MongoDB分片集群架构及其原理分析 2.MongoDB分片集群环境搭建 3.MongoDB分片策略和数据均衡详解 4.写事务之writeConcern实战 5.读事务之readPreferencereadConcern实战 6.MongoDB多文档事务

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包