《MongoDB入门教程》第15篇 文档更新之$inc操作符

《MongoDB入门教程》第15篇 文档更新之$inc操作符
最新回答
一杯清酒当人生

2024-03-27 17:38:11

$inc 操作符是 MongoDB 中用于原子性增减文档字段值的工具,支持正负数调整且能自动创建不存在的字段。以下通过三个示例详细说明其用法:

1. 基础用法:增加字段值

语法:{ $inc: { <field>: <amount> } }示例:将 _id: 1 的商品价格增加 50

db.products.updateOne( { _id: 1 }, { $inc: { price: 50 } })

结果

  • 原价格 799 → 更新后 849
  • 返回结果中的 modifiedCount: 1 表示成功修改 1 条文档

关键点

  • 字段不存在时会自动创建(如 { $inc: { newField: 10 } } 会创建 newField 并赋值为 10)
  • 仅适用于数字类型(整数、浮点数等)
2. 减少字段值

示例:将同一商品价格减少 150

db.products.updateOne( { _id: 1 }, { $inc: { price: -150 } })

结果

  • 原价格 849 → 更新后 699
  • 负数表示减少,正数表示增加

应用场景:库存扣减、积分消耗等需要递减的场景

3. 多字段更新(含嵌套字段)

语法:支持同时更新多个字段,包括嵌套文档示例:同时更新 price 和嵌套字段 spec.ram

db.products.updateOne( { _id: 1 }, { $inc: { price: 50, "spec.ram": 4 // 使用点号访问嵌套字段 }})

结果

  • price: 699 → 749
  • spec.ram: 4 → 8

注意事项

  • 嵌套字段需用引号包裹(如 "spec.ram")
  • 若路径中某层级不存在(如 spec 不存在),操作会失败
总结
  • 原子性:$inc 是原子操作,适合高并发场景
  • 灵活性:支持正负数、多字段、嵌套字段
  • 自动创建:字段不存在时自动初始化
  • 限制:仅适用于数值类型,非数值字段会报错

通过以上示例,可以快速掌握 $inc 在价格调整、库存管理、数据统计等场景的应用。