// backendmodelsPlaylist.js
const mongoose = require('mongoose');
const playlistSchema = new mongoose.Schema({
name: { type: String, required: true },
videos: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Video' }],
userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
});
module.exports = mongoose.model('Playlist', playlistSchema);
// backendmodelsVideo.js
const mongoose = require('mongoose');
const commentSchema = new mongoose.Schema({
userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
username: { type: String, required: true },
comment: { type: String, required: true },
date: { type: Date, default: Date.now },
});
const videoSchema = new mongoose.Schema({
title: String,
description: String,
url: String,
uploadDate: {
type: Date,
default: Date.now,
},
uploader: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
likes: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
comments: [commentSchema],
cloudinary_id: { type: String, required: true },
});
module.exports = mongoose.model('Video', videoSchema);
// backendmodelsUser.js
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const userSchema = new mongoose.Schema({
username: { type: String, required: true, unique: true },
password: { type: String, required: true },
});
userSchema.pre('save', async function (next) {
if (this.isModified('password')) {
this.password = await bcrypt.hash(this.password, 10);
}
next();
});
userSchema.methods.comparePassword = function (password) {
return bcrypt.compare(password, this.password);
};
module.exports = mongoose.model('User', userSchema);
The Playlist Modal has reference to Video Modal, The Video Modal has reference to User Modal, but I am receiving only the id’s present in the Video Model not Video Modal itself. Explain in a simple & intuitive way. I am looking for a clear & easy to understand explanation.
This is how I am accessing using API
router.get('/playlist/:id/videos', authMiddleware, async (req, res) => {
try {
const playlist = await Playlist.findById(req.params.id)
.populate({
path: 'videos',
populate: { path: 'uploader' }
});
if (playlist.userId.toString() !== req.userData.userId) {
return res.status(403).json({ message: 'Forbidden' });
}
res.json(playlist.videos);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
I made necessary changes to the code by adding populate() method, but getting the same issue.