MongoDB/Mongoose如何向复杂嵌套结构的指定数组批量添加元素
错误根因
你当前的报错是因为更新路径没有正确定位到protocolli数组中匹配条件的单个元素,protocolli.parametri的写法会被MongoDB识别为要给整个protocolli数组添加parametri字段,而非目标子对象的内嵌数组。
解决方法
使用MongoDB的数组位置占位符$来指代查询条件中匹配到的protocolli数组元素下标,将更新字段路径调整为protocolli.$.parametri即可,修改后代码如下:
this.model.updateMany( { 'protocolli.nome': ProtocolloAlert.PROTOCOLLO_2 }, { $push: { 'protocolli.$.parametri': { $each: [ TipoParametro.FAT_MASS, TipoParametro.DISTANCE, TipoParametro.MUSCLE_MASS, TipoParametro.STEPS, TipoParametro.CALORIES, TipoParametro.MINUTES, ], }, }, } )
补充说明
- 如果要避免重复添加相同的参数值,可以将
$push替换为$addToSet,会自动对数组内的值去重。 - Mongoose中
updateMany方法默认会更新所有匹配的文档,不需要额外配置{ multi: true }参数。
内容的提问来源于stack exchange,提问作者Cri
相关产品推荐
相关产品推荐

