Mongoose更新所有文档时报回调错误,如何给全部文档新增字段?
报错原因及解决方法
报错核心原因是你混用了MongoDB原生Shell的
update参数规则与Mongoose的方法参数规则:
原生Mongo Shell的update方法第三、第四位参数分别对应upsert(无匹配文档时是否新增)、multi(是否修改所有匹配文档),但Mongoose的update方法第三参数为配置对象,第四参数要求传入回调函数,你传入布尔值true不符合参数要求,因此触发报错。
推荐解决方案:使用updateMany方法(适配Mongoose 5.x及以上版本)
updateMany是Mongoose目前推荐的批量更新方法,默认对所有匹配的文档生效,无需额外传multi参数,语法更清晰:
// 异步写法(推荐,需放在async函数内) await client.schema.updateMany( {}, // 空查询匹配集合内所有文档 { $set: {"newField": 1} } )
如果需要用回调函数处理结果,写法如下:
client.schema.updateMany( {}, { $set: {"newField": 1} }, (err, result) => { if (err) return console.error('更新失败:', err) console.log('更新完成,匹配文档数:', result.matchedCount, '修改文档数:', result.modifiedCount) } )
兼容旧版update写法(仅用于老版本Mongoose项目适配)
如果必须使用update方法,需要把upsert、multi参数放到第三个配置对象中:
await client.schema.update( {}, { $set: {"newField": 1} }, { upsert: false, multi: true } )
内容的提问来源于stack exchange,提问作者Bob joe12
相关产品推荐
相关产品推荐

