MongoDB数据更新中的乘法$mul

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

空闲下来,仔细阅读Mongodb的官方文档,发现很多新的功能。mongodb为了给开发人员更好的体验,提供了各种方便快捷的方法。本文介绍mongodb数据更新操作中的乘法操作符$mul.

提到乘法,各位看官会有哪些场景出现?商场打折促销 ,商品统一打八折,对应数据库里的价格直接乘以0.8.但实际上商场运营人员不会这样操作,可能是先把价格提高25%,然后再打八折。咋一看,各位消费者享受到了各种优惠,但实际上并没有划算的感觉。而且随着这种操作的增加,商场的信誉也逐渐遭受了损失。

抛开商场的信誉不谈 。技术上,mongodb为这种数据更新,提供了一个便利的方法。对于开发人员来说,确实得到了不少的划算。原子操作,事务上的事情,都丢给mongodb内部来处理。mongodb自己计算并更新数据,开发人员只需知道数据是否更新就可以了。

定义

$mul, 将字段值乘以某个数值。

语法

{$mul: { <field1>: <number1>, ...}}

其中field1字段值需要是数字类型。当操作嵌入式文档类型或数组中的字段时,使用点操作符。

行为

mongodb 5.0版本以后,向$mul传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。

从mongodb5.0开始,更新操作的顺序按照文档字段名的字母表顺序执行。带有数字名称的字段,按照数字顺序更新。

当字段不存在时,mongodb添加该字段并将该字段值设置为0

使用$mul对单文档的操作是原子性的。

使用不同类型数字相乘时,因为数据类型不一致,更新后字段的数字类型可能会进行转换。

下表列出不同数值类型相乘时的结果

32位整型

64位整型

浮点型

32位整型

32位整型或64位整型

64位整型

浮点型

64位整型

64位整型

64位整型

浮点型

浮点型

浮点型

浮点型

浮点型

当两个32位整型数据相乘的结果超过32位整型最大值时,结果会转化为64位。而当相乘的结果超过64位整型数值的最大值时,mongodb会报错。

应用

创建products集合,并插入数据

db.products.insertOne({'_id':1, "item": "Hats", "price": Decimal128("10.99"), "quantity": 25}
)

构建数据更新语句,将price字段值乘1.25, quantity字段乘2

db.products.updateOne({_id: 1},{$mul: {price: Decimal128("1.25"),quantity: 2}}
)

向products字段插入数据,其中price字段不存在

db.products.insertOne( {_id: 2, item: "Unknown"})

构建查询语句,将不存在的字段乘100,能够看到mongodb向文档中添加了字段price并将字段值设置为0

db.products.updateOne({_id: 2},{ $mul: {price: Decimal128("100")}})

向products集合中插入数据,其中price是浮点数类型Decimal("10")

db.products.insertOne({_id: 3, item: "Scarf", price: Decimal128("10")})

构建数据更新语句,使用整型数int32(5)与字段price相乘。其结果还是一个浮点数类型。

db.products.updateOne({_id: 3
}, {$mul: {price: Int32(5)}
})

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

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

相关文章

【C++】STL--list

目录 list的介绍 list的使用 list的构造 list iterator的使用 list capacity list modifiers list的迭代器失效 list模拟实现 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向…

电容隔离型±10V输入隔离放大器特点:ISOC 124P

产品特点: 50KHz(-3dB)高带宽与ISO 124P隔离器Pin-Pin兼容 低成本小体积&#xff0c;标准DIP16Pin阻燃材料封装 精度等级:0.01级&#xff0c;全量程内非线性度0.01% 信号输入与输出之间:3000VDC隔离耐压 电源范围:4.5V~18V 双极运算:Vo10V 方便易用&#xff0c;固定单位增益配置…

ubuntu安装nginx以及开启文件服务器

1. 下载源码 下载页面&#xff1a;https://nginx.org/en/download.html 下载地址&#xff1a;https://nginx.org/download/nginx-1.24.0.tar.gz curl -O https://nginx.org/download/nginx-1.24.0.tar.gz2. 依赖配置 sudo apt install gcc make libpcre3-dev zlib1g-dev ope…

【分治算法】Strassen矩阵乘法Python实现

文章目录 [toc]问题描述基础算法时间复杂性 Strassen算法时间复杂性 问题时间复杂性Python实现 个人主页&#xff1a;丷从心. 系列专栏&#xff1a;Python基础 学习指南&#xff1a;Python学习指南 问题描述 设 A A A和 B B B是两个 n n n \times n nn矩阵&#xff0c; A A…

CICD流水线 发布应用到docker镜像仓库

准备工作 1.先注册免费的镜像仓库 复制链接: https://cr.console.aliyun.com/cn-beijing/instances 实施 1. 新建流水线&#xff0c;选择模板 2.添加流水线源&#xff0c;及是你的代码仓库, 选择对应分支. 3.代码检查以及单元测试&#xff0c;这个步骤可以不用动它. 4. …

gcc/g++:预编译阶段寻找头文件

预编译阶段寻找头文件大致可分为两种情况&#xff1a;1&#xff09;系统头文件&#xff0c;2&#xff09;用户头文件。 示例&#xff1a; 1&#xff09;用户头文件 /*brief design and implements of demo-for-precompile-to-include.author wenxuanpeiemail 15873152445163.…

AI的力量感受(附网址)

输入 科技感的 二维码&#xff0c;生成如下&#xff0c;还是可以的 输入金属感 的芯片&#xff0c;效果就很好了 金属感 打印机&#xff0c;细节丰富&#xff0c;丁达尔效应 就有点跑题了 金属感 扫码仪 还有点像 3D 封装长这样&#xff0c;跑题比较严重 总之&#xff0c;AI还…

如何使用生成式人工智能撰写关于新产品发布的文章?

利用生成式人工智能撰写新产品发布文章确实是一种既有创意又高效的内容生成方式。以下是如何做到这一点的指南&#xff0c;附带一些背景信息&#xff1a; • 背景&#xff1a;在撰写文章之前&#xff0c;收集有关您的新产品的信息。这包括产品的名称、类别、特点、优势、目标受…

朗汀留学美国生物医学工程专业留学部分录取案例合集

满怀期待的憧憬与金榜题名的喜悦交织着未来的掌声&#xff0c;捧在手心里的不仅仅是一份一份努力浇灌的录取通知&#xff0c;更是一起拼搏走过的岁月沉淀。 我们感恩每一位朗汀留学的学生和家长&#xff0c;是你们的支持与信任&#xff0c;让我们有机会共享此刻的荣耀&#xff…

数据挖掘及其近年来研究热点介绍

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

jdk目录结构

jdk目录详解 JDK(Java Development Kit&#xff0c;Java开发包&#xff0c;Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者 编译&#xff0c;调试和运行用Java语言写的applet和应用程序所需的工具组成。 JDK(J…

【数据结构】考研真题攻克与重点知识点剖析 - 第 6 篇:图

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

通过 ffmpeg命令行 调节视频播放速度

1. 仅调整视频速率 视频调速原理&#xff1a;修改视频的pts&#xff0c;dts # 可能会丢帧 ffmpeg -i input.mkv -an -filter:v "setpts0.5*PTS" output.mkv # 可用-r参数指定输出视频FPS以防止丢帧 ffmpeg -i input.mkv -an -r 60 -filter:v "setpts2.0*PTS&q…

redis的HyperLogLogs详细介绍

Redis的HyperLogLogs是一种概率数据结构&#xff0c;用于估计集合中的元素个数&#xff0c;即基数。即使存储了超大数据&#xff08;超过2^64的基数&#xff09;的集合&#xff0c;HyperLogLogs也只需要12KB的内存&#xff0c;所有这使得其非常适合做大规模数据的去重计数。 H…

MySQL | 如何使用mysqldumpslow命令进行SQL慢查询分析?

关注WX&#xff1a;CodingTechWork 介绍 启用慢查询日志 编辑 MySQL 配置文件&#xff1a;打开 MySQL 的配置文件&#xff08;通常是 my.cnf 或 my.ini&#xff09;。 启用慢查询日志&#xff1a;找到以下配置项并进行设置&#xff1a; slow_query_log 1 # 启用…

爱普生语音芯片的特点与应用市场

随着物联网与智能家居的普及&#xff0c;越来越多的电子产品有了语音播报的需求。但是很多客户没有类似的开发经验或者他们的产品内部只能承载一个蜂鸣器。这样的情况下要如何实现快速的产品升级呢?下面让我们来看一下差普生语音芯片是如果帮助客户的。目前爱普生语音芯片分为…

Redis 的主从复制、哨兵和cluster集群

目录 一. Redis 主从复制 1. 介绍 2. 作用 3. 流程 4. 搭建 Redis 主从复制 安装redis 修改 master 的Redis配置文件 修改 slave 的Redis配置文件 验证主从效果 二. Redis 哨兵模式 1. 介绍 2. 原理 3. 哨兵模式的作用 4. 工作流程 4.1 故障转移机制 4.2 主节…

记录一次内网渗透过程

0x01 前言&#xff1a; 一切以学习为主&#xff0c;记录一次小小的攻击过程 本次是通过外网漏洞撕开的口子&#xff0c;主要通过一下方式 拿到了目标资产 nday扫一扫 弱口令爆一爆 上传接口找一找 后台上传找一找 数据库弱口令 关注新day&#xff0c;有了立马在资产里面…

K8s学习三(Pod与探针)

深入学习Pod Pod配置文件 写一个自己的配置文件,nginx-po.yaml apiVersion: v1 #api文档版本 kind: Pod #资源类型对象&#xff0c;也可以配置为像Development&#xff0c;StatefulSet这一类的对象 metadata: # Pod相关的元数据&#xff0c;用于描述Pod的数据name: nginx-po…

深度比较Vue 3.0中的computed和watch属性用法与最佳实践

摘要&#xff1a;在Vue 3.0中&#xff0c;computed和watch属性是用于处理数据逻辑的重要工具。本文将详细对比这两个属性的工作原理、适用场景以及使用时的注意事项&#xff0c;旨在帮助开发者更有效地选择和使用它们。 一、computed属性 computed属性是Vue 3.0中用于计算数据…