mongodb .保存不是Mongoose中的函数

icnyk63a  于 2022-11-22  发布在  Go
关注(0)|答案(1)|浏览(193)

我使用Mongo的方式有什么问题?我只是想更新一个记录。
下面是我的代码:

async function updateReview (req, res) {
  const review = {
    ...req.body
  }

  const existingReview = await Review.findOne({
    userId: review.userId,
    launchId: review.launchId
  }).lean() 

  if (!existingReview) {
    return res.status(404).send()
  }
  existingReview.content = review.content
  existingReview.displayName = review.displayName
  existingReview.rating = review.rating

  await existingReview.save()
  return res.status(200)
}

因此,我所要做的就是找到现有的评论,更新一些字段并保存它。我的代码在以下行失败:await existingReview.save()。错误说明.save不是函数。

yizd12fk

yizd12fk1#

.save()函数不存在,因为您调用了.lean(),它返回的是普通JS对象而不是Mongoose对象。
请使用下列选项之一,而不要使用.save()
实施例一

async function updateReview (req, res) {
  const review = {
    ...req.body
  }

  const existingReview = await Review.findOne({
    userId: review.userId,
    launchId: review.launchId
  }).lean() 

  if (!existingReview) {
    return res.status(404).send()
  }

  const { content, displayName, rating } = review;
  const { _id } = existingReview;

  await Review.updateOne({ _id }, { content, displayName, rating });

  return res.status(200)
}

实施例二

async function updateReview (req, res) {
  const review = {
    ...req.body
  }

  const existingReview = await Review.findOne({
    userId: review.userId,
    launchId: review.launchId
  }).lean() 

  if (!existingReview) {
    return res.status(404).send()
  }

  const { content, displayName, rating } = review;
  const { _id } = existingReview;

  await Review.findOneAndUpdate({ _id }, { content, displayName, rating }).lean();

  return res.status(200)
}

由于不需要更新的对象,因此使用updateOne而不是findOneAndUpdate

相关问题