MongoDB如何用单条查询递增数组内指定项的apples字段值?
MongoDB单条查询更新数组中指定元素的字段值
刚好之前处理过类似的数组更新需求,你可以用MongoDB的arrayFilters配合$inc操作符来实现单条查询完成更新,具体命令如下:
db.collection.updateOne( { "_id": 12345 }, // 定位到目标文档 { $inc: { "options.$[elem].apples": 1 // 对匹配到的数组元素的apples字段递增1 } }, { arrayFilters: [ { "elem.no": { $in: [1, 3] } } // 指定要匹配的数组元素条件:no为1或3 ] } )
我给你拆解下这个命令的关键部分:
updateOne确保只更新符合条件的单个文档(因为你是通过_id定位的,只会匹配到一个)$inc是MongoDB的递增操作符,专门用来对数值型字段做增减操作arrayFilters是核心,它定义了数组元素的匹配规则,这里用$in来匹配no等于1或3的元素,$[elem]是一个占位符,对应arrayFilters里的条件,会自动把符合条件的数组元素找出来并更新- 注意这个特性需要MongoDB 3.6及以上版本支持,如果你的版本太低得先升级
执行完这条命令后,你的文档里options数组中no为1和3的项的apples字段就都会从0变成1啦。
内容的提问来源于stack exchange,提问作者MediaMaker
相关产品推荐
相关产品推荐

