You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:51:33