Model.findById()返回未定义

时间:2020-05-18 23:48:34

标签: javascript express mongoose

我试图实现一个收藏夹开关,它将收藏夹保存在数组中,我创建了一个架构和一个路由器,您可以在问题下方看到的代码是当我尝试在失眠时对其进行测试时,我的console.log(isFavorite)。我不知道怎么了。

const userSchema = new Schema({
    username: String,
    email: String,
    password: String,
    favorites: [{ type: Schema.Types.ObjectId, ref: "Places" }],
  },
  {
    timestamps: true,
  });

//路线

router.put("/favorites/:placeId", (req, res) => {

  const userId = "5ebd13df31430045957db8c3";

  User.findById(userId).then( (user) => {

    const isFavorite = user.favorites.find( (favorite) => {
      return favorite === req.params.placeId;
    });

    console.log(isFavorite);
    console.log(req.params.placeId);

    if (isFavorite) {
      User.findOneAndUpdate(
        { _id: userId },
        {
          $pull: { favorites: req.params.placeId },
        },
        {
          new: true,
        })
        .then((user) => res.json(user))
        .catch((err) => res.status(400).json(err));
    } else {
      User.findOneAndUpdate(
        { _id: userId },
        {
          $push: { favorites: req.params.placeId },
        },
        {
          new: true,
        })
        .then((user) => res.json(user))
        .catch((err) => res.status(400).json(err));
    }
  });
});

1 个答案:

答案 0 :(得分:0)

此块很糟糕:

User.findById(userId).then((user) => {
    const isFavorite = user.favorites.find((favorite) => {
      return favorite === req.params.placeId;
    });

必须使用populate():

let favorites = await User.findById(userId).populate('favorites');

,然后按placeId过滤收藏夹