Я новичок в реляционной базе данных . Я использую 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}!`));