Пн goose Отношение один-ко-многим не показывает ожидаемых результатов - PullRequest
0 голосов
/ 28 марта 2020

Я новичок в реляционной базе данных . Я использую node js и express для бэкэнда, REST API и база данных MongoDB. Я использую mon goose для подключения и моделей. Я успешно подключился к базе данных и смог опубликовать и получить данные. Из тестирования приложения я использую Почтальон. Я создал две модели: одна студентка, а другая - курс. Моя цель: один студент может иметь несколько курсов и не допускать дублирования имени, телефона, электронной почты студента. Я могу опубликовать курсы со студентами, которые я получил от Mongodb. Когда тестовый курс получает запрос, я вижу связь между курсами и студентом image , но я пытаюсь получить запрос от студентов, я не вижу связи между студентом и курсом image . Также, когда я пытаюсь получить запрос на одного студента, я не вижу отношения image

Это моя модель студента

const mongoose = require("mongoose");
const { Schema } = mongoose;

const studentModel = new Schema({
  _id: mongoose.Schema.Types.ObjectId,
  name: {
    type: String,
    required: true,
    unique: true
  },
  birthday: {
    type: Date,
    required: true
  },
  address: {
    type: String,
    required: true
  },
  zipcode: {
    type: Number,
    required: true
  },
  city: {
    type: String,
    required: true
  },
  phone: {
    type: Number,
    required: true,
    unique: true
  },

  email: {
    type: String,
    required: true,
    unique: true
  },
  course: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "course"
  }
});

const student = mongoose.model("student", studentModel);
module.exports = student;

Это моя модель курса

const mongoose = require("mongoose");
const { Schema } = mongoose;

const courseModel = new Schema({
  _id: mongoose.Schema.Types.ObjectId,
  name: {
    type: String,
    required: true
  },
  startdate: {
    type: Date,
    required: true
  },
  enddate: {
    type: Date,
    required: true
  },

  student: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "student"
  }
});

const course = mongoose.model("course", courseModel);
module.exports = course;

Это мой сервер, запрос на получение и публикацию.

require("dotenv").config();
const express = require("express");
const app = express();
const morgan = require("morgan");
const helmet = require("helmet");
const cors = require("cors");
const mongoose = require("mongoose");
const student = require("./models/student");
const course = require("./models/course");
//app middlewear
app.use(morgan("common"));
app.use(helmet());
app.use(cors());
app.use(express.json()); //body Parser

//Connect to db
mongoose
  .connect(process.env.MONGODB_URI, {
    useUnifiedTopology: true,
    useNewUrlParser: true
  })
  .then(() => console.log("DB Connected!"))
  .catch(err => {
    console.log(err);
  });

//student

app.get("/students", async (req, res, next) => { //This is all students get request
  try {
    await student
      .find()
      .populate("course")
      .select("name birthday address zipcode city phone email course")
      .then(docs => {
        const response = {
          count: docs.length,
          students: docs
        };
        res.json(response);
      });
  } catch (error) {
    console.log(error);
  }
});

app.get("/students/:id", async (req, res, next) => { //THIS SINGLE STUDENTS GET REQUEST
  const id = req.params.id;
  try {
    student.findById(id).then(data => {
      console.log(data);
      res.json(data);
    });
  } catch (error) {
    console.log(error);
  }
});



app.post("/students", async (req, res, next) => {
  const logs = new student({
    _id: mongoose.Types.ObjectId(),
    name: req.body.name,
    birthday: req.body.birthday,
    address: req.body.address,
    zipcode: req.body.zipcode,
    city: req.body.city,
    phone: req.body.phone,
    email: req.body.email,

  });
  logs
    .save()
    .then(data => {
      console.log(data);
      res.json(data);
    })
    .catch(err => {
      console.log(err);
    });
});
//course
app.get("/courses", async (req, res, next) => {//THIS IS COURSE GET REQUEST WHERE I CAN SEE THE POST AND RELATIONSHIP BETWEEN COURSE AND STUDENT
  try {
    await course
      .find()
      .select("name  student startdate enddate ")
      .populate("student") 
      .then(docs => {
        const response = {
          count: docs.length,
          courses: docs
        };
        res.json(response);
      });
  } catch (error) {
    console.log(error);
  }
});



app.post("/courses", async (req, res, next) => { //THIS IS COURSE POST REQUEST
  const logs = new course({
    _id: mongoose.Types.ObjectId(),
    name: req.body.name,
    startdate: req.body.startdate,
    enddate: req.body.enddate,
    student: req.body.studentid
  });
  logs
    .save()
    .then(data => {
      console.log(data);
      res.json(data);
    })
    .catch(err => {
      console.log(err);
    });
});

const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`? App is listening at port ${port}!`));
...