我正在使用 MongoDB,并且我有一个文档,我想在其中增加计数字段。但是,我需要确保该计数不会低于零。例如,如果 inc 为 -2 并且当前计数为 1,则应用 $inc 将导致 -1,这是我想避免的。
这是我当前使用的更新操作:
db.collection.updateMany(
{ '_id': {'$in': object_ids} },
{
'$inc': { 'count': inc },
'$addToSet': {...},
'$set': {...},
}
)
我已经尝试过这 2 个,但是由于“$addToSet”无法添加为管道阶段,所以我不能像这样使用:
db.collection.updateMany({ '_id': {'$in': object_ids} }, [ { $set: { count: { $cond: { if: { $gte: [{ $add: ['$count', inc] }, 0] }, then: { $add: ['$count', inc] }, else: 0 } } } } ] )
我也想过用
'$expr': { '$gte': ['$count', 0] }
但这并不能阻止递减为负数!
一种可能的解决方案是使用两步过程:
使用 updateMany 和
$inc
来增加文档的计数字段。
db.collection.updateMany(
{ '_id': { '$in': object_ids } },
{
'$inc': { 'count': inc },
'$addToSet': {...},
'$set': {...},
}
)
使用另一个
updateMany
操作与 $max
将任何负计数字段设置为零。
db.collection.updateMany(
{ '_id': { '$in': object_ids }, 'count': { '$lt': 0 } },
{
'$set': { 'count': 0 }
}
)