Mongo Shell转换genres字段类型时报错:db.netflix.save不是函数
解决MongoDB中
save()函数报错及genres字段类型转换问题 错误原因
MongoDB 4.4及后续版本已弃用并移除save()方法,因此执行db.netflix.save(x)会触发TypeError: db.netflix.save is not a function错误。
解决方案
根据需求(将字符串类型的genres转为数组),提供以下几种可行方案:
方案1:用replaceOne()替换文档
通过文档_id匹配,替换整个文档并更新genres字段:
db.netflix.find({}).forEach(function(x) { x.genres = JSON.parse(x.genres); db.netflix.replaceOne({ _id: x._id }, x); });
方案2:用updateOne()精准更新字段
仅更新genres字段,无需替换整个文档,更高效:
db.netflix.find({}).forEach(function(x) { const parsedGenres = JSON.parse(x.genres); db.netflix.updateOne( { _id: x._id }, { $set: { genres: parsedGenres } } ); });
方案3:MongoDB 4.2+ 批量聚合更新(推荐大数量场景)
利用聚合管道批量更新,避免循环遍历,性能更优:
db.netflix.updateMany( {}, [ { $set: { genres: { $function: { body: function(str) { return JSON.parse(str); }, args: ["$genres"], lang: "js" } }}} ] );
注意事项
- 执行批量操作前,先测试单条数据转换结果:
JSON.parse(db.netflix.findOne().genres),确保转换后的数组格式符合预期。 - 数据量较大时,优先选择方案3的批量更新方式,减少数据库交互次数。
内容的提问来源于stack exchange,提问作者4C4_ Anudeep
相关产品推荐
相关产品推荐

