在尝试使用findOneAndUpdate并更新对象数组时出现Mongoose错误

a1o7rhls  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(195)

我尝试使用Mongoose更新UserSchema中名为watched_movies_list的对象数组。通过使用$push对象,通过传递_id: req.body.id来给定用户ID。但是,当我尝试更新watched_movies_list字段时,我得到了如下的转换错误。

reason: CastError: Cast to ObjectId failed for value "{
    title: 'Luck',
    overview: 'Suddenly finding herself in the never-before-seen Land of Luck, the unluckiest person in the world must unite with the magical creatures there to turn her luck around.',
    poster_path: '/1HOYvwGFioUFL58UVvDRG6beEDm.jpg',
    original_title: 'Luck',
    original_language: 'en',
    id: 550,
    release_date: '2022-08-05',
    genre_ids: undefined
  }" (type Object) at path "movie_meta_data" because of "BSONTypeError"

这是我的UserSchema:

watched_movies_list: [{
    movie_meta_data: {
      type: Schema.Types.ObjectId,
      ref: "MovieDataSchema"
    },
    rating: {type: Number}
  }]

这是POST路由:

try {
    const user = await User.findOneAndUpdate(
      {_id: req.body.id},
      { "$push": { watched_movies_list: watchedMovie }});
    res.status(200).json({
      success: 'true',
      user: user
    })
  } catch (err) {
    res.status(400).json(err);
    throw err;
  }
wyyhbhjk

wyyhbhjk1#

您正在尝试将一个“对象”推入watched_movies_list数组。不幸的是,此数组被定义为ObjectId数组。您必须首先将对象存储在MovieDataSchema集合中,然后仅将_id推入数组,或者将watched_movies_list定义为MovieDataSchema对象的数组(从而作为嵌套文档)。

在收到以下评论的反馈后更新:

为了具有嵌套文档,应按如下方式定义架构:

watched_movies_list: [{
  movie: MovieDataSchema,
  rating: {type: Number}
}]

之后,您应该能够进行以下函数调用:

const user = await User.findOneAndUpdate(
      {_id: req.body.id},
      { "$push": { watched_movies_list: { movie: watchedMovie } }
);

或者,如果要包括您的评分,则应按如下方式包括:

const user = await User.findOneAndUpdate(
      {_id: req.body.id},
      { "$push": { watched_movies_list: { movie: watchedMovie, rating: 5 } }
);

相关问题