• Mongodb中一个小巧的数据更新命令$inc


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

    $inc是一个很小巧的命令。说它小巧,一个是因为短,只有三个字符。另一个是说它功能轻巧。在开发库存,电商类的应用时,往往遇到订单增加,库存减少的数据更新场景。使用$inc命令,可以将订单增加,库存减少在同一个原子操作中完成。使得这样复杂的数据性一致操作,变得很轻巧。同时,官方文档给出的篇幅也很小。忙碌了一天,阅读文档时也顿觉轻巧。

    定义

    使用操作符$inc,按照用户指定的大小,增加或减少字段值

    语法

    使用$inc操作符需要遵照下面的语法。其中,amount正值表示向字段增加,复制表示减少。

    { $inc: { <field1>: <amount1>, <field2>: <amount2>, ...}}

    行为

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

    如下面的更新语句中, 字段"a.2"在"a.10"前更新。因为数字2排列在数字10前。

    {$set: { "a.2": <new value>, "a.10": <new value>}}

    操作符$inc接受正值和负值。

    当字段不存在是,操作符$inc添加字段并将字段设置为指定的数值。

    使用$inc操作空值null时,Mongodb会报错。

    单文档操作中使用$inc操作符修改数据的行为是一个原子操作。

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

    应用举例

    创建一个products集合,并插入数据。

    1. db.products.insertOne(
    2. {
    3. _id: 1,
    4. sku: "abc123",
    5. quantity: 10,
    6. metrics: { orders: 2, ratings: 3.5}
    7. }
    8. )

    构建数据修改脚本,满足下面的数据更新要求

    • 将字段"metrics.orders"值增加1
    • 将字段值quantity减2
    1. db.products.updateOne(
    2. {sku: "abc123"},
    3. {$inc: {quantity: -2, "metrics.orders": 1}}
    4. )

    查看更新结果

    1. db.products.find()
    2. {
    3. "_id" : 1,
    4. "sku" : "abc123",
    5. "quantity" : 8,
    6. "metrics" : {
    7. "orders" : 3,
    8. "ratings" : 3.5
    9. }
    10. }

  • 相关阅读:
    java实现命令模式
    剑指offer 46. 把数组排成最小的数
    【C语言】排序算法 -------- 计数排序
    js页面window.onload()=$(function(){}) 和$(docunment).ready(function(){})
    Xcode应用安全堡垒:全方位安全性测试指南
    3D~RPG游戏的制作
    壳聚糖导管复合辛伐他汀/泊洛沙姆407水凝胶/负载转化生长因子β1温敏性壳聚糖水凝胶的制备
    数据安全:.[bkpsvr@firemail.cc].EKING勒索病毒的特点和数据恢复方法
    WEB三大主流框架之React
    JVM 彻底搞懂JVM内存区域及直接内存
  • 原文地址:https://blog.csdn.net/wilsonzane/article/details/137239940