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

使用Mongoose更新MongoDB数据时出现save is not a function错误

问题原因与修复方案

错误原因

你调用result.save()报错是因为**find()方法返回的是文档数组**,而非单个Mongoose文档对象。数组本身没有save()方法,所以会抛出"save is not a function"的错误。


修复方案

方案1:直接批量更新(推荐)

如果需求是更新所有符合条件的文档,没必要先查询再逐个保存,用updateMany()更高效:

const mySchema = require('../models/schemaPath')

mySchema.updateMany({}, { $set: { myData: 'someData' } })
  .then(() => {
    console.log('Done')
  })
  .catch((err) => {
    console.log(err)
  })
  • 第一个空对象{}表示匹配所有文档,可根据需求添加查询条件
  • $set是MongoDB的更新操作符,用于设置字段值

方案2:遍历查询结果逐个保存

如果必须先查询文档再做自定义处理后保存,需要遍历find()返回的数组,对每个文档单独调用save():

const mySchema = require('../models/schemaPath')

mySchema.find()
  .then(async(results) => {
    for (const doc of results) {
      doc.myData = 'someData';
      // 或者用Object.assign(doc, { myData: 'someData' })
      await doc.save();
    }
    console.log('Done')
  })
  .catch((err) => {
    console.log(err)
  })

方案3:查询单个文档

如果目标是更新单个文档,用findOne()代替find(),它返回单个Mongoose文档对象,可直接调用save():

const mySchema = require('../models/schemaPath')

mySchema.findOne() // 可添加查询条件,比如findOne({ _id: 'xxx' })
  .then(async(result) => {
    if (!result) {
      console.log('未找到文档');
      return;
    }
    result.myData = 'someData';
    await result.save();
    console.log('Done')
  })
  .catch((err) => {
    console.log(err)
  })

内容的提问来源于stack exchange,提问作者seriously

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:05:24