首页 > 解决方案 > 将数组对象保存到 MongoDB 数据库时出现 Mongoose “VersionError”

问题描述

正如标题所说,我在将对象数组保存到数据库时遇到问题。

我正在从客户端发送一组对象。

我有 3 个数组,全部包含对象 - 一个包含用户当前收藏电台的数组 - 一个包含用户想要删除的电台的数组 - 以及一个包含用户想要添加到收藏夹的电台的数组

然后我执行一些逻辑,将用户想要从用户喜爱的电台中删除的电台删除。然后,我将更新后的收藏夹与用户想要添加的电台连接起来。我想用数据库中更新的对象数组替换旧的收藏夹。

问题在于它返回此错误,并且不会更新数据库。我似乎找不到解决方案来解决它。

  message: 'No matching document found for id "5eada425ad35cdeac7c987f2" version 0 modifiedPaths "favouriteStations"',
  name: 'VersionError',
  version: 0,
  modifiedPaths: [ 'favouriteStations' ]
}

这是我目前正在使用的发布请求逻辑

router.post("/favourites", (req, res) => {
  console.log("UPDATING USER FAVE STATIONS");
  const { id, removedStations, selectedStations, favouriteStations } = req.body;

  const errors = validationResult(req);

  if (!errors.isEmpty()) {
    console.log("There are validation errors");
    return res.status(422).json({ errors: errors.array() });
  } else {
    UserModel.findOneAndUpdate({ _id: id }, { findOneAndUpdate: false })
      .then((user, err) => {
        if (err) {
          console.log("ERROR", err);
          res.sendStatus(500);
        } else {
          const removed = favouriteStations.filter(
            (fave) =>
              !removedStations.some((rem) => rem.crs_code === fave.crs_code)
          );

          const final = removed.concat(selectedStations);

          user.favouriteStations = final;

          user.save((err, user) => {
            if (err) {
              console.log("ERROR", err);
              res.sendStatus(500);
            } else {
              console.log(("UPDATED", user));
              res.sendStatus(200);
            }
          });
        }
      })
      .catch((err) => {
        console.log(err);
        res.sendStatus(500);
      });
  }
});

标签: arraysnode.jsmongodbexpressmongoose

解决方案


推荐阅读