Mongoose 如何更新嵌套对象指定字段且不删除其余原有属性?
你遇到的问题是嵌套字段更新的写法错误导致的,正确写法如下:
Model.updateMany(req.query, { $set: { 'remindTime.date': '2021-09-28' } })
错误原因说明
- 第一种写法:直接给
remindTime字段赋值为仅包含date属性的对象,会直接覆盖remindTime的原有完整结构,因此原有time属性会被清空。 - 第二种写法:
$set操作符的层级放错,且没有用正确的方式指定嵌套字段,语法结构本身也存在错误,无法实现精准更新嵌套属性的效果。
原理说明
MongoDB 支持通过点操作符定位嵌套的子字段,搭配$set操作符使用时,只会更新你指定的子字段,不会修改同一层级下的其他属性,完全可以保留原有remindTime.time的值不需要额外操作。
内容的提问来源于stack exchange,提问作者Jerry Seigle
相关产品推荐
相关产品推荐

