MongoDB单次查询中按条件执行不同操作的实现咨询
解决方案
完全可以在单次MongoDB请求中实现该需求,MongoDB 4.2及以上版本支持的聚合管道更新原生支持这种条件分支更新逻辑,不需要分多次请求。
核心实现逻辑
用$cond条件运算符做分支判断:
- 当
field值大于10时,直接返回0赋值给字段 - 否则用
$add运算符给原有field值加1,等价于自增操作(聚合管道中不能直接使用普通更新的$inc运算符,用$add即可实现相同效果)
示例代码
单文档更新
db.collection.updateOne( // 这里写你的文档匹配条件,比如按_id匹配 { _id: ObjectId("替换为你的文档ID") }, // 聚合管道更新数组 [ { $set: { field: { $cond: { if: { $gt: [ "$field", 10 ] }, then: 0, else: { $add: [ "$field", 1 ] } } } } } ] )
批量文档更新
如果要对所有符合匹配条件的文档执行该逻辑,把updateOne替换为updateMany即可。
效果验证
| 执行前field值 | 执行后field值 |
|---|---|
| 8 | 9 |
| 10 | 11 |
| 11 | 0 |
该操作是原子性的,不存在并发更新冲突问题,全程只发起一次数据库请求。
内容的提问来源于stack exchange,提问作者MMC
相关产品推荐
相关产品推荐

