MongoDB使用$addToSet向数组中添加元素

news2024/11/26 2:52:43

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第66篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

本文来源于mongodb的官方文档,探讨向mongodb的数组中添加元素的方法$addToSet。

定义

使用方法$addToSet, 向数组中添加不存在的元素。如果元素已经存在于目标数组当中,则使用$addToSet不会更新当前文档。

语法

按照下面的形式使用$addToSet操作符。

{$addToSet: {<field1>: <value1>, ...}}

当向嵌入文档或数组中添加元素时,使用点操作符。

行为

  • 自mongodb5.0开始,UPDATE操作按照字段名称的字典顺序更新字段。当字段中包含数字时,按照数字顺序依次更新字段。当然,对一个文档的多个字段操作,是原子性的。
  • $addToSet只能保证不会向数组当中插入已经存在的数据。而不会对数组中已经存在的重复元素产生影响。也不会对数组中元素的顺序产生影响。
  • mongodb 5.0版本以后,向$addToSet传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。
  • 使用$addToSet向不存在的数组字段添加数组元素时,mongodb会创建该字段并将元素插入到该字段当中。
  • 不可以向非数组字段插入元素,否则会报错。
  • 向数组字段插入的是一个数组时,$addToSet方法将指定的数组作为一个元素插入到数组当中。
  • 向数组字段插入文档时,mongodb会判断即将插入的文档与数组当中已有的元素是否严格相等。包括字段名称,字段值,字段顺序等。

应用

向非数组字段插入数据报错

创建pigments集合并插入数据

db.pigments.insertOne({_id: 1, colors: "blue, green, red"})

使用$addToSet向colors字段插入数组元素

db.pigments.updateOne({_id:1}, {$addToSet: {"colors": "mauve"}})
WriteError({
	"index" : 0,
	"code" : 2,
	"errmsg" : "Cannot apply $addToSet to non-array field. Field named 'colors' has non-array type string",
	"op" : {
		"q" : {
			"_id" : 1
		},
		"u" : {
			"$addToSet" : {
				"colors" : "mauve"
			}
		},
		"multi" : false,
		"upsert" : false
	}
})

向数组字段插入数组

创建集合alphabet

db.alphabet.insertOne({_id: 1, letters: ["a", "b"]})

向letters字段,插入数组["c", "d"]

db.alphabet.updateOne({_id: 1}, {$addToSet:{"letters": ["c", "d"]}})

查看插入结果

db.alphabet.find()
{
	"_id" : 1,
	"letters" : [
		"a",
		"b",
		[ "c", "d" ] 
	]
}

将数组作为一个整体插入到数组letters中。若期望将数组["c", "d"]的每一个元素插入字段letters中,使用$each操作符。

db.alphabet.updateOne({_id:1}, {$addToSet: {"letters":{$each: ["c", "d"]}}})

向数组字段中插入数据

创建集合inventory并插入数据

db.inventory.insertOne(
    {_id:1, item: "polarizing_filter", tags: ["electronics", "camera"]}
    )

向字段tags插入元素

db.inventory.updateOne(
    {_id:1},
    {$addToSet: {tags: "accessories"}}
    )

查询插入结果

向数组中插入已存在的元素

db.inventory.updateOne(
    {_id:1},
    {$addToSet: {tags: "camera"}}
    )

因为"camera"已经存在于数组tags当中,所以没有数据更新。

{
	"acknowledged" : true,
	"matchedCount" : 1,
	"modifiedCount" : 0
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端菜鸡学习日记 -- computed和watch的用法

目录 1.computed&#xff1a; 2.watch&#xff1a; 哈喽哇大家&#xff0c;又是新的一周&#xff0c;因为一些特殊的原因&#xff0c;所以目前是比较闲的&#xff0c;就趁机多学习一点东西把&#xff0c;这些学习日记就是学习中的笔记咯&#xff0c;流水账日记则是工作中遇到…

基于Elementui组件,在vue中实现多种省市区前端静态JSON数据展示并支持与后端交互功能,提供后端名称label和id

基于Elementui组件&#xff0c;在vue中实现多种省市区前端静态数据&#xff08;本地JSON数据&#xff09;展示并支持与后端交互功能&#xff0c;提供后端名称label和id 话不多说&#xff0c;先上图 1.支持传递给后端选中省市区的id和名称&#xff0c;示例非常完整&#xff0c…

WordPress简单好看的线报主题模板源码

安装说明 到WordPress管理后台中的「外观」-「主题」中点击「添加」&#xff0c;选择baolog的主题包进行上传安装并启用即可。 提示&#xff1a;为了防止主题不兼容&#xff0c;请在安装主题前进行数据备份&#xff0c;防止数据字段重复覆盖等情况发生。 源码截图 源码下载 …

Git--Part3--远程操作 配置 标签管理

theme: nico 远程仓库 Git 是分布式版本控制系统&#xff0c;同⼀个 Git 仓库&#xff0c;可以分布到不同的机器上。怎么分布呢&#xff1f; 最早&#xff0c;肯定只有⼀台机器有⼀个原始版本库&#xff0c;此后&#xff0c;别的机器可以 “克隆” 这个原始版本库&#xff0…

php配合fiddler批量下载淘宝天猫商品数据分享

有个做电商的朋友问我&#xff0c;每次上款&#xff0c;需要手动去某宝去搬运商品图片视频&#xff0c;问我能不能帮忙写个脚本&#xff0c;朋友开口了&#xff0c;那就尝试一下 首先打开某宝&#xff0c;访问一款商品&#xff0c;找出他的数据来源 通过观察我们发现主图数据来…

网络学习(三)TCP三次握手、四次挥手,及Wireshark抓包验证

目录 一、什么是 TCP 三次握手&#xff1f;二、什么是 TCP 四次挥手&#xff1f;三、Wireshark抓包验证3.1 如何捕获三次握手、四次挥手3.2 TCP 三次握手的记录3.3 数据传输3.4 TCP 四次挥手的记录 一、什么是 TCP 三次握手&#xff1f; TCP&#xff08;Transmission Control …

设计模式(三)代理模式

目录 一、什么是代理模式 二、静态代理 1、定义 2、代码 2.1、接口 2.2、被代理对象 2.3、代理对象 2.4、测试 三、动态代理 1、定义 2、代码 2.1、接口 2.2、目标对象 2.3、代理对象 2.4、测试 一、什么是代理模式 代理模式(Proxy Pattern)是一种结构性模式。代理模…

学习笔记——网络管理与运维——SNMP(SNMP原理)

四、SNMP原理 SNMP的工作原理基于客户端-服务器模型。其中&#xff0c;网络管理系统是客户端&#xff0c;而网络设备是服务器。客户端向服务器发送请求消息(即"Get"或"Set"命令)来获取或修改服务器的信息。服务器收到请求消息后&#xff0c;会返回相应的响…

物联网技术-第2章-物联网技术架构

目录 1.1为什么需要物联网架构 1.2系统体系结构的基本概念 1.3物联网工作过程与人的智能处理问题过程比较 1.4物联网的四层体系架构 1.4.1物联网感知层 1.4.1.1感知层要解决的问题 1.4.1.2感知层的形态 1.4.2物联网网络层 1.4.2.1网络层相关概念 1.4.2.2计算机网络的逻…

深度学习神经网络协同过滤模型(NCF)与用户协同过滤(UCF)的区别

一、效果图 点我查看在线demo 二、启发式推荐系统 推荐系统的核心是根据用户的兴趣需求&#xff0c;给用户推荐喜欢的内容。常用的推荐算法有启发式推荐算法&#xff0c;可分为基于用户的 协同过滤&#xff0c;基于物品的协同过滤。 1、基于用户的协同过滤&#xff08;UCF…

Api Post快速上手教程

Apipost快速上手教程可以按照以下步骤进行&#xff1a; 一、准备工作 访问Apipost官网下载并安装Apipost客户端&#xff0c;或者选择使用其Web端版本。注册并登录Apipost账号&#xff0c;以便更好地管理和使用你的项目。官网&#xff1a;Apipost-API 文档、设计、调试、自动化…

Matlab初识:什么是Matlab?它的历史、发展和应用领域

目录 一、什么是Matlab&#xff1f; 二、Matlab的历史与发展 三、Matlab的应用领域 四、安装和启动Matlab 五、界面介绍 六、第一个Matlab程序 七、总结 一、什么是Matlab&#xff1f; Matlab 是由 MathWorks 公司开发的一款用于数值计算、可视化以及编程的高级技术计算…

第十七课,海龟画图习题课(一)

图案一&#xff0c;半圆 import turtleturtle.circle(50, 180)turtle.left(90)turtle.forward(100) 图案二&#xff0c;同心圆 import turtleturtle.circle(100)turtle.right(90)turtle.penup()turtle.forward(50)turtle.pendown()turtle.left(90)turtle.circle(150) 图案三&am…

6.1触发器的创建、删除和使用

6.1.1 触发器概述 触发器是一个被指定关联到表的数据库对象&#xff0c;与表的关系密切&#xff0c;不需要用户调用&#xff0c;在一个表的特定事件出现时将会被激活&#xff0c;此时某些MySql语句会自动执行。 触发器用于实现数据库的完整性&#xff0c;具有以下特点&#xff…

【Python机器学习实战】----基于AdaBoost分类树模型、梯度提升分类树模型、Bagging分类树模型以及随机森林分类模型对空气质量等级进行预测

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

前端学习笔记100篇之002:Webpack简明教程(持续完善中)

文章目录 1. **安装和初始化**2. **创建和配置入口文件**3. **编写和配置Webpack配置文件**4. **打包和运行项目** Webpack是一个静态模块打包工具&#xff0c;适用于前端项目构建和模块化开发。Webpack通过从入口文件构建依赖图&#xff0c;然后打包相关的模块&#xff0c;最终…

什么是小语言模型?

介绍 近年来&#xff0c;人工智能领域取得了重大进展&#xff0c;尤其是在自然语言处理领域。GPT-3 和 PaLM 等大型语言模型因其出色的能力而备受关注&#xff0c;新一波小型语言模型正在兴起&#xff0c;它们在性能和效率之间提供了有希望的平衡。 什么是小语言模型&#xf…

[AIGC] 图论基础入门

图论是数学的一个分支&#xff0c;旨在研究图&#xff08;graph&#xff09;的属性和应用。这是一个跨学科领域&#xff0c;因为图论可以用于描述和解决各种实际问题。如社交网络分析&#xff0c;电脑网络&#xff0c;生物网络等。 文章目录 什么是图&#xff1f;图的基本性质L…

应急便携式气象观测站

TH-BQX5自然灾害&#xff0c;如台风、暴雨、洪涝、干旱等&#xff0c;给人们的生命财产安全带来了巨大威胁。在应对这些灾害时&#xff0c;准确的气象观测数据是制定有效应对策略的基础。近年来&#xff0c;应急便携式气象观测站在自然灾害的监测和预警中发挥了越来越重要的作用…

python GUI开发: tkinter选项卡,移动滑块,颜色选择框,文本对话框,对话输入框,通用消息框模块用法详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…