I am trying to write a MERN stack app used for reviewing books.
I have 2 MongoDB (Mongoose) schemas: models/Book.js
and models/Review.js
, where one Book can have multiple Reviews.
These are my schemas:
models/Review.js:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let reviewSchema = new Schema(
{
text: {
type: String
},
book: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Book'
}
}
);
module.exports = mongoose.model('Review', reviewSchema)
models/Book.js:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let bookSchema = new Schema(
{
title: {
type: String
},
detail: {
type: String
}
}, {
collection: 'books'
}
);
module.exports = mongoose.model('Book', bookSchema)
How should a route look like if I want to get all data about a single book via this URL: /book/<book_id_from_mongodb>
?
I can only get Book’s data but I don’t know how to get all Reviews that belong to that particular book:
/routes/book.route.js:
let mongoose = require('mongoose'),
express = require('express'),
router = express.Router();
let bookSchema = require('../models/Book');
let reviewSchema = require('../models/Review');
// Get a single book - HOW SHOULD I MODIFY THIS ROUTE TO GET ALSO ALL REVIEWS FOR THAT BOOK ?
router.route('/book/:id').get((req, res) => {
bookSchema.findById(req.params.id, (error, data) => {
if (error) {
res.status(500).send(err);
} else {
res.status(200).json(data)
}
})
})