MongoDB使用$inc更新字段时如何设置最小值不低于0
MongoDB 字段递减不低于0的实现方案
你可以根据你的MongoDB版本选择以下两种方案实现需求:
方案1:匹配条件添加字段值限制(兼容所有MongoDB版本,优先推荐)
仅在fieldToLower当前值大于0时才执行减1操作,值为0时直接不触发更新,从根源避免出现负数,性能最优,不会产生无效写入。
mycollection.update_one( {"_id": the_id, "fieldToLower": {"$gt": 0}}, {"$inc": {"fieldToLower": -1}} )
方案2:聚合更新管道(仅支持MongoDB 4.2及以上版本)
利用聚合表达式计算新值,取减1后的结果和0的最大值,无论原字段值是多少都会保证最终结果≥0,适合需要同时更新其他字段、无论fieldToLower是否大于0都需要触发更新动作的场景。
mycollection.update_one( {"_id": the_id}, [ {"$set": {"fieldToLower": {"$max": [{"$add": ["$fieldToLower", -1]}, 0]}}} ] )
内容的提问来源于stack exchange,提问作者Tom3652
相关产品推荐
相关产品推荐

