首页 > 解决方案 > Mongoose 模型不保存引用模型?

问题描述

我目前正在尝试使用 mongo 和 express 设置后端 API,并且我正在努力让创建路由工作。这是我的路线:

reservationsRouter.post("/", (req, res) => {
  assert.notEqual(req.body.user, null);
  const user = User.findById(req.body.user);
  const reservation = new Reservation({
    dateStart: req.body.dateStart,
    dateEnd: req.body.dateEnd,
    user: user
  });
  res.json(reservation);
  reservation.save();
});

我的预订架构:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const ReservationSchema = Schema({
  user: { type: Schema.ObjectId, ref: "User", required: true },
  dateStart: { type: String, required: true },
  dateEnd: { type: String, required: true }
});

module.exports = ReservationSchema;

和我的用户架构:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const userSchema = Schema({
  _id: { type: String, required: true },
  firstName: { type: String, required: true },
  lastName: { type: String, required: true },
  reservations: [{ type: Schema.Types.ObjectId, ref: "Reservation" }]
});

module.exports = userSchema;

我的问题是,当我保存预订并获取所有预订时,它没有user属性,即使我已经在模式中指定了它:

{
    "dateStart": "1234",
    "dateEnd": "12345",
    "_id": "5b127d9d3d8256eedd31173b"
}

编辑:我已经重写了路线,以便回调返回与用户的预订,但是,当我获取所有预订时,用户不包括在上面的示例中。

reservationsRouter.post("/", (req, res) => {
  assert.notEqual(req.body.user, null);
  const user = User.findById(req.body.user, (err, user) => {
    if (err) res.send(err);
    else {
      const reservation = new Reservation({
        dateStart: req.body.dateStart,
        dateEnd: req.body.dateEnd,
        user: user
      });
      res.json(reservation);
      reservation.save();
    }
  });
});

您可能想查看整个仓库:https ://github.com/SchulenbergOrg/backend/tree/mongo

标签: javascriptnode.jsdatabasemongodbmongoose

解决方案


推荐阅读