MongoDB UPDATE使用$setOnInsert为新插入数据设置默认值

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第60篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。

使用Mongodb UPDATE数据更新字段,当文档不存在,通过指定{upsert: true},可以向数据库插入这条不存在的数据。插入新的数据时,在某些业务场景中,期望对指定字段插入默认值 。比如小学生入学时,默认插入年级为1年级。而不需要更新已存在的数据值。

Mongodb 提供了$setOnInsert方法,当更新不存在的数据,触发insert操作时,向字段指定值。而当数据存在时,只执行$set方法中的字段更新。

定义

在UPDATE语句中,指定{upsert: true}. 当触发新的文档插入操作时,使用$setOnInsert方法向插入文档的指定字段指定默认值。当没有新的文档插入时,不会执行$setOnInsert方法里的语句。

语法

db.collection.updateOne(<query>,{ $setOnInsert: { <field1>: <value1>,...}},{ upsert: true}
)

指定嵌套文档或数组文档中的字段时,使用点操作符。

行为

  • 自mongodb5.0开始,UPDATE操作按照字段名称的字典顺序更新字段。当字段中包含数字时,按照数字顺序依次更新字段。当然,对一个文档的多个字段操作,是原子性的。
  • mongodb 5.0版本以后,向$setOnInsert传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。

应用

创建products集合并向集合中插入数据。

db.products.insertOne({_id: 100,quantity: 250,instock: true,reorder: false,details: { model: "14QQ", make: "Clothes Corp" },tags: [ "apparel", "clothing" ],ratings: [ { by: "Customer007", rating: 4 } ]
})

编写数据更新语句,更新products集合中不存在的数据,指定{upsert: true}。使用$setOnInsert方法,当更新的数据不存在时,插入默认字段{ defaultQty: 100}.

db.products.updateOne({_id: 1},{$set: {item: "apple"},$setOnInsert: {defaultQty: 100}},{upsert: true})

编写数据更新语句,更新文档{_id:100}。指定{upsert: true},使用$setOnInsert方法,当更新的数据不存在时,插入默认字段{ defaultQty: 100}.

db.products.updateOne({_id: 100},{$set: {item: "apple"},$setOnInsert: {defaultQty: 100}},{upsert: true})

查看数据更新结果,$setOnInsert方法并未执行。

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

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

相关文章

linux配置IP、子网掩码、网关

linux虚拟机配置IP、子网掩码、网关 本方法适用于 Ubuntu 18.04 之后的版本。 例1&#xff1a; 配置信息&#xff1a; IP:10.100.100.23 子网掩码:255.255.255.240 网关:10.100.100.56 1、打开网络配置文件 01-network-manager-all.yaml sudo vi /etc/netplan/01-network-…

Linux 记一次spin_lock死锁优化经验

From 程序员秘书 死锁是很常见的一种内核故障。 最简单也是最常见的&#xff0c;就是如果一个task在已经持有某个锁的情况下&#xff0c;再次尝试获取同一个锁&#xff0c;就会形成死锁局面。发生死锁的场景有很多&#xff0c;常见的情况可能有&#xff0c;可能是在同一个tas…

高效扫码点餐:简餐茶饮外卖新体验

前言 在快节奏的现代生活中&#xff0c;高效便捷的扫码点餐系统正逐渐成为简餐茶饮行业的新宠。这一系统不仅提升了顾客的点餐体验&#xff0c;还优化了门店的运营效率&#xff0c;特别是基于总部多门店的连锁模式&#xff0c;更是将这一优势发挥得淋漓尽致。 一、这款扫码点餐…

如何通过PHP语言实现远程控制多路照明

如何通过PHP语言实现远程控制多路照明呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制多路照明&#xff0c;通过多路控制器&#xff0c;可独立远程控制多路照明。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂…

软理复习范围

1.直觉主义逻辑常采用三值逻辑来处理命题的真值&#xff0c;包括以下三个真值&#xff1a; 真&#xff08;True&#xff09;&#xff1a;表示命题是确定为真的。假&#xff08;False&#xff09;&#xff1a;表示命题是确定为假的。未知&#xff08;Unknown&#xff09;&#…

Prism 入门02,区域介绍

一.区域概念和使用方式 什么是区域(Region)?区域,在Prism 框架中,区域是模块化的核心功能之一,其主要作用是降低应用程序和模块之间的耦合度 。使用方式:在应用程序的界面中,划分出某块区域,并为这个区域定义一个唯一的区域名称。那么通过这个区域名称,应用程序就可以…

el-tabel名称排序问题

el-tabel排序 最终实现功能如下&#xff1a; 排序限制为&#xff1a; 文件夹>普通文件 数字&#xff08;0->9&#xff09;->大写字母&#xff08;A->Z&#xff09;->小写字母&#xff08;a->z&#xff09;->中文拼音&#xff08;a->z&#xff09; 正序…

程序性能优化

索引 没加索引&#xff08;where条件字段、order by字段&#xff0c;常用字段添加索引&#xff09;索引没生效选错索引SQL优化 SQL数据库性能优化-CSDN博客远程调用 并行调用数据异构重复调用 循环查数据库死循环无限递归异步处理 线程池mq服务器&#xff08;全称消息队列服务器…

[原创]C++ 11的thread_local线程局部变量与Lambda表达式配合使用, 却引发致命的, 难以发现的冲突.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

探索Python的itertools模块:高效迭代的瑞士军刀

探索Python的itertools模块&#xff1a;高效迭代的瑞士军刀 Python的itertools模块是一个强大的工具箱&#xff0c;它提供了一系列的迭代器工具&#xff0c;用于创建复杂的迭代逻辑。这个模块的函数返回的都是迭代器&#xff0c;这意味着它们是懒加载的&#xff0c;只有在需要…

Unity开发Cosmos使用BNG Framework获取按键信息

Unity开发Cosmos使用BNG Framework获取按键信息 1、新建一个脚本&#xff0c;复制下面代码 using BNG;[Header("Input")]//[Tooltip("The key(s) to use to toggle locomotion type")]public List<ControllerBinding> locomotionToggleInput new …

处理无法拉取GitHub库的解决方案

提交和拉取github上的库总是失败&#xff0c;这里记录一下如何使用代理解决。 首先找到端口&#xff0c;记住它的端口 然后使用git命令 # HTTP/HTTPS 协议 git config ––global http.url.proxy http://127.0.0.1:port # 以 Github 为例 git config ––global http.https:/…

短网址生成原理及使用

生成短网址介绍&#xff1a; 一、定义 短网址&#xff08;Short URL&#xff09;是形式上比较短的网址&#xff0c;它通过将原始冗长的网址进行缩短&#xff0c;方便用户分享和记忆。短网址的生成主要依赖于特定的算法和服务&#xff0c;通过后端服务转向来实现网址的缩短。 …

MongoDB $rename 给字段一次重新命名的机会

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第58篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。 在日常编写程序过程中&#xff0c;命名错误是经常出现的错误。拼写错误的单词&#xff0c;大小写字…

gitbook 域名设置 域名绑定 自定义域名

有时候我们搜文档的时候&#xff0c;会遇到gitbook的文档。诸如这样&#xff1a; jums.gitbook.io/mysql-shi-zhan-45-jiang 即&#xff1a;个人的名字gitbook的域名书名。 具体格式如下&#xff1a; 1. 自定义域名 所有在 Gitbook.com 上的书的http 地址为 http://{author…

什么是人机协同翻译

什么是人机协同翻译 序什么是人机协同翻译账号绑定服务开通文档翻译图片翻译体验感受及建议 序 什么是人机协同翻译&#xff0c;为什么会需要人机协同翻译&#xff0c;以及人机协同翻译的效果&#xff0c;应用场景等&#xff0c;本文将关于这些内容一一解答。 什么是人机协同…

大语言模型RAG-将本地大模型封装为langchain的chat model(三)

大语言模型RAG-将本地大模型封装为langchain的chat model&#xff08;三&#xff09; 往期文章&#xff1a; 大语言模型RAG-技术概览 (一) 大语言模型RAG-langchain models (二) 上一期langchain还在0.1时代&#xff0c;这期使用的langchain v0.2已经与之前不兼容了。 本期介…

【调试笔记-20240604-Linux-为 OpenWrt LuCI 界面添加多语言支持】

调试笔记-系列文章目录 调试笔记-20240604-Linux-为 OpenWrt LuCI 界面添加多语言支持 文章目录 调试笔记-系列文章目录调试笔记-20240604-Linux-为 OpenWrt LuCI 界面添加多语言支持 前言一、调试环境操作系统&#xff1a;Ubuntu 22.04.4 LTS编译环境调试目标 二、调试步骤预…

mysql使用sorce、load 导入数据

1、本机安装mysql https://blog.csdn.net/weixin_52687711/article/details/130509902 注意&#xff1a;修改安装路径 配置环境变量 2. 使用sorce命令导入数据 https://blog.csdn.net/2301_82257317/article/details/138332048 使用mysql命令框链接目标数据库 以管理员身份运…

新媒体运营主要都做哪些内容的工作?

1.新媒体运营的核心工作是转化。这包括通过活动运营、内容运营和社群运营等方式吸引和激活用户&#xff0c;从而增加产品的活跃度和留存率。具体来说&#xff0c;运营人员会撰写内容并发布到各大自媒体平台&#xff0c;以吸引和拉新用户。同时&#xff0c;他们还会通过各种手段…