MongoDB如何更新数组内的指定字段值?
解决方案
你不需要使用$set,应该直接用$inc操作符结合MongoDB的数组定位符来实现需求,同时要修改查询条件确保定位到正确的选项。
正确代码
const {id, option} = req.body; const db = await getMongoDb(); await db.collection('polls').updateOne( { _id: id, "options.option": option // 新增条件,定位到包含目标选项的文档 }, { $inc: { "options.$.vote": 1 // $是数组定位符,匹配第一个符合条件的数组元素 }, }, );
说明
"options.$.vote"中的$是MongoDB的数组定位符,它会自动匹配查询条件里"options.option": option对应的数组元素- 查询条件中添加
"options.option": option,既能确保只更新包含目标选项的投票文档,也能让数组定位符$正确找到要更新的元素 - 使用
$inc而不是$set,可以原子性地对vote字段进行加1操作,避免并发更新时的冲突
内容的提问来源于stack exchange,提问作者Kal
相关产品推荐
相关产品推荐

