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)}
})

相关推荐

  1. MongoDB数据更新乘法$mul

    2024-04-04 11:12:03       41 阅读
  2. Mongodb一个小巧数据更新命令$inc

    2024-04-04 11:12:03       30 阅读
  3. C/C++整数乘法运算与汇编指令MUL和IMUL

    2024-04-04 11:12:03       35 阅读
  4. Mongodb使用$<identifier>过滤更新数组元素

    2024-04-04 11:12:03       35 阅读
  5. MongoDB 聚合查询在数据统计应用

    2024-04-04 11:12:03       53 阅读
  6. MongodbObjectId

    2024-04-04 11:12:03       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 11:12:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 11:12:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 11:12:03       87 阅读
  4. Python语言-面向对象

    2024-04-04 11:12:03       96 阅读

热门阅读

  1. mac电脑下pip安装库后,仍然提示command not found

    2024-04-04 11:12:03       32 阅读
  2. 前端大额计算,真正解决js精度丢失问题

    2024-04-04 11:12:03       30 阅读
  3. Python学习之-迭代器和生成器

    2024-04-04 11:12:03       30 阅读
  4. 工业交换机:在恶劣环境中稳定通信的关键

    2024-04-04 11:12:03       37 阅读
  5. using和typename在C++中的用法

    2024-04-04 11:12:03       33 阅读
  6. mysql乐观锁总结和实践:用version或者时间戳

    2024-04-04 11:12:03       34 阅读
  7. opencv加载出来的灰度图如何传递给pyqt的QImage?

    2024-04-04 11:12:03       34 阅读
  8. HTTP不同版本的区别

    2024-04-04 11:12:03       36 阅读
  9. BitVM及其优化思考

    2024-04-04 11:12:03       32 阅读