当前位置: 首页 > news >正文

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方法并未执行。

相关文章:

  • 6.7.32 用于计算机辅助检测和诊断研究的精选乳房 X 线摄影数据集
  • 12. Django 第三方功能应用
  • 私有云数据库特征
  • AdroitFisherman模块测试日志(2024/6/10)
  • 动态内存管理学不懂,小代老师带你深入理解动态内存管理(下卷)
  • 堆和栈(heap and stack)
  • 汽车EDI——Volvo EDI 项目案例
  • 计算机网络期末考试知识点(关键词:江中)
  • Spark 面试题(二)
  • BIOPLUSS引领膳食行业创新、整合与再造
  • OpenCV 双目三角法计算点云
  • 电影推荐系统的设计
  • 【Python教程】4-字符串、列表、字典、元组与集合操作
  • C#项目实战
  • 数据中台、数据仓库、数据湖的区别和关联
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Android Volley源码解析
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • hadoop集群管理系统搭建规划说明
  • iOS编译提示和导航提示
  • mongodb--安装和初步使用教程
  • php的插入排序,通过双层for循环
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 看域名解析域名安全对SEO的影响
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 一些关于Rust在2019年的思考
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 自动记录MySQL慢查询快照脚本
  • Python 之网络式编程
  • 阿里云ACE认证之理解CDN技术
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​520就是要宠粉,你的心头书我买单
  • #pragma data_seg 共享数据区(转)
  • #大学#套接字
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (6)添加vue-cookie
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (四)鸿鹄云架构一服务注册中心
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .net core + vue 搭建前后端分离的框架
  • .net core Swagger 过滤部分Api
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 回调、接口回调、 委托
  • /bin/bash^M: bad interpreter: No such file or directory
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • /var/lib/dpkg/lock 锁定问题
  • @Validated和@Valid校验参数区别
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [20160902]rm -rf的惨案.txt
  • [20190113]四校联考
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [ASP]青辰网络考试管理系统NES X3.5
  • [CISCN 2019华东南]Web11
  • [CQOI 2010]扑克牌