mongodb4.4递增操作和递减操作$inc

 "$inc"  运算符可以用来修改已存在的键值或者在该键不存在时创建它。

1.假设我们创建了一个关于游戏的集合,将游戏和变化的分数都存储在了里面。当用户玩弹球游戏时,我们可以插入一个包含游戏名称和玩家的文档来标识不同的游戏:

db.games.insertOne({"game" : "pinball", "user" : "joe"})

当小球撞到砖块时,就会给玩家加分。分数可以随便给,这里约定玩家得分的基数为 50。可以使用  "$inc"  修饰符给玩家加 50 分(score键原先并不存在,创建了这个键,并将值设置成了:50)

db.games.updateOne({"game" : "pinball", "user" : "joe"},{"$inc" : {"score" : 50}})

如果小球落入了加分区,要加 100 00 分。可以给  "$inc"  传递一个不同的值:

db.games.updateOne({"game" : "pinball", "user" : "joe"},{"$inc" : {"score" : 10000}})

和  "$set"  用法类似, "$inc"  是专门用来对数字进行递增和递减操作的。 "$inc"  只能用于整型、长整型或双精度浮点型的值。如果用在其他任何类型(包括很多语言中会被自动转换为数值的类型,比如 null、布尔类型以及数字构成的字符串)的值上,则会导致操作失败:

db.games.updateOne({"game" : "pinball", "user" : "joe"},{"$inc" : {"score" : "100"}})

可以看到字符串类型是不行的。

2.目前不支持多个键的更新

db.products.insertOne(
   {
     _id: 1,
     sku: "abc123",
     quantity: 10,
     metrics: { orders: 2, ratings: 3.5 }
   }
)

以下操作希望将:

将"metrics.orders"字段增加 1
将quantity字段增加 -2 (减少quantity)

执行以下语句:

db.products.updateOne(
   { sku: "abc123" },
   { $inc: { quantity: -2, "metrics.orders": 1 } }
)

实际上只将quantity字段增加-2 

官方链接:https://www.mongodb.com/docs/v6.0/reference/operator/update/inc/?_ga=2.151762941.531716534.1660384056-826128844.1655436504

posted @ 2022-08-13 21:01  雍洲无名  阅读(513)  评论(0编辑  收藏  举报